diff --git a/README.md b/README.md
index d046e14..8d32ca9 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,3 @@ All matters regarding the intellectual property of this code or software are sub
without the express and written permission of Cyril Lapinte.
Copyright © 2016 - 2019 Cyril Lapinte - All Rights Reserved
-
-## Coverage
-
-https://sirhill.github.io/onchain/coverage/
diff --git a/coverage.json b/coverage.json
deleted file mode 100644
index 9797b55..0000000
--- a/coverage.json
+++ /dev/null
@@ -1 +0,0 @@
-{"contracts/governance/Operator.sol":{"l":{"29":208,"30":203,"37":2,"44":2,"55":59,"57":57,"58":2,"60":57,"62":57,"63":65,"64":65,"66":57},"path":"/home/node/project/contracts/governance/Operator.sol","s":{"1":208,"2":2,"3":2,"4":59,"5":57,"6":57,"7":57,"8":65,"9":65,"10":57},"b":{"1":[203,5],"2":[57,2]},"f":{"1":208,"2":2,"3":2,"4":59},"fnMap":{"1":{"name":"onlyOperator","line":28,"loc":{"start":{"line":28,"column":2},"end":{"line":28,"column":23}}},"2":{"name":"operatorCount","line":36,"loc":{"start":{"line":36,"column":2},"end":{"line":36,"column":56}}},"3":{"name":"operatorAddress","line":43,"loc":{"start":{"line":43,"column":2},"end":{"line":43,"column":75}}},"4":{"name":"defineOperators","line":53,"loc":{"start":{"line":53,"column":19},"end":{"line":54,"column":3}}}},"statementMap":{"1":{"start":{"line":29,"column":4},"end":{"line":29,"column":47}},"2":{"start":{"line":37,"column":4},"end":{"line":37,"column":27}},"3":{"start":{"line":44,"column":4},"end":{"line":44,"column":33}},"4":{"start":{"line":55,"column":4},"end":{"line":55,"column":54}},"5":{"start":{"line":57,"column":4},"end":{"line":57,"column":1305}},"6":{"start":{"line":60,"column":4},"end":{"line":60,"column":43}},"7":{"start":{"line":62,"column":4},"end":{"line":62,"column":1450}},"8":{"start":{"line":63,"column":6},"end":{"line":63,"column":52}},"9":{"start":{"line":64,"column":6},"end":{"line":64,"column":46}},"10":{"start":{"line":66,"column":4},"end":{"line":66,"column":25}}},"branchMap":{"1":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"2":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":55,"column":4}},{"start":{"line":55,"column":4},"end":{"line":55,"column":4}}]}}},"contracts/governance/Ownable.sol":{"l":{"24":61,"31":61,"32":59,"39":0,"40":0,"48":0,"56":0,"57":0,"58":0},"path":"/home/node/project/contracts/governance/Ownable.sol","s":{"1":61,"2":61,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"b":{"1":[59,2],"2":[0,0]},"f":{"1":61,"2":61,"3":0,"4":0,"5":0},"fnMap":{"1":{"name":"constructor","line":23,"loc":{"start":{"line":23,"column":2},"end":{"line":23,"column":22}}},"2":{"name":"onlyOwner","line":30,"loc":{"start":{"line":30,"column":2},"end":{"line":30,"column":22}}},"3":{"name":"renounceOwnership","line":38,"loc":{"start":{"line":38,"column":46},"end":{"line":38,"column":3}}},"4":{"name":"transferOwnership","line":47,"loc":{"start":{"line":47,"column":63},"end":{"line":47,"column":3}}},"5":{"name":"_transferOwnership","line":55,"loc":{"start":{"line":55,"column":2},"end":{"line":55,"column":57}}}},"statementMap":{"1":{"start":{"line":24,"column":4},"end":{"line":24,"column":21}},"2":{"start":{"line":31,"column":4},"end":{"line":31,"column":31}},"3":{"start":{"line":39,"column":4},"end":{"line":39,"column":34}},"4":{"start":{"line":40,"column":4},"end":{"line":40,"column":21}},"5":{"start":{"line":48,"column":4},"end":{"line":48,"column":32}},"6":{"start":{"line":56,"column":4},"end":{"line":56,"column":35}},"7":{"start":{"line":57,"column":4},"end":{"line":57,"column":47}},"8":{"start":{"line":58,"column":4},"end":{"line":58,"column":20}}},"branchMap":{"1":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":4},"end":{"line":31,"column":4}},{"start":{"line":31,"column":4},"end":{"line":31,"column":4}}]},"2":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":4},"end":{"line":56,"column":4}},{"start":{"line":56,"column":4},"end":{"line":56,"column":4}}]}}},"contracts/interface/IERC20.sol":{"l":{},"path":"/home/node/project/contracts/interface/IERC20.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interface/IRouter.sol":{"l":{},"path":"/home/node/project/contracts/interface/IRouter.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/interface/IUserRegistry.sol":{"l":{},"path":"/home/node/project/contracts/interface/IUserRegistry.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},"contracts/math/SafeMath.sol":{"l":{"17":0,"18":0,"21":0,"22":0,"23":0,"33":0,"40":9,"41":9,"48":7,"49":7,"50":7},"path":"/home/node/project/contracts/math/SafeMath.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":9,"8":9,"9":7,"10":7,"11":7},"b":{"1":[0,0],"2":[0,0],"3":[9,0],"4":[7,0]},"f":{"1":0,"2":0,"3":9,"4":7},"fnMap":{"1":{"name":"mul","line":13,"loc":{"start":{"line":13,"column":2},"end":{"line":13,"column":70}}},"2":{"name":"div","line":29,"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":68}}},"3":{"name":"sub","line":39,"loc":{"start":{"line":39,"column":2},"end":{"line":39,"column":68}}},"4":{"name":"add","line":47,"loc":{"start":{"line":47,"column":2},"end":{"line":47,"column":70}}}},"statementMap":{"1":{"start":{"line":17,"column":4},"end":{"line":17,"column":495}},"2":{"start":{"line":18,"column":6},"end":{"line":18,"column":14}},"3":{"start":{"line":21,"column":4},"end":{"line":21,"column":12}},"4":{"start":{"line":22,"column":4},"end":{"line":22,"column":21}},"5":{"start":{"line":23,"column":4},"end":{"line":23,"column":12}},"6":{"start":{"line":33,"column":4},"end":{"line":33,"column":16}},"7":{"start":{"line":40,"column":4},"end":{"line":40,"column":17}},"8":{"start":{"line":41,"column":4},"end":{"line":41,"column":16}},"9":{"start":{"line":48,"column":4},"end":{"line":48,"column":12}},"10":{"start":{"line":49,"column":4},"end":{"line":49,"column":17}},"11":{"start":{"line":50,"column":4},"end":{"line":50,"column":12}}},"branchMap":{"1":{"line":17,"type":"if","locations":[{"start":{"line":17,"column":4},"end":{"line":17,"column":4}},{"start":{"line":17,"column":4},"end":{"line":17,"column":4}}]},"2":{"line":22,"type":"if","locations":[{"start":{"line":22,"column":4},"end":{"line":22,"column":4}},{"start":{"line":22,"column":4},"end":{"line":22,"column":4}}]},"3":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":4},"end":{"line":40,"column":4}},{"start":{"line":40,"column":4},"end":{"line":40,"column":4}}]},"4":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":4},"end":{"line":49,"column":4}},{"start":{"line":49,"column":4},"end":{"line":49,"column":4}}]}}},"contracts/registry/UserRegistry.sol":{"l":{"41":49,"42":112,"50":4,"57":10,"64":3,"65":3,"66":3,"68":0,"75":7,"82":15,"91":4,"98":4,"105":3,"114":3,"123":1,"124":2,"134":86,"135":82,"136":78,"138":78,"147":30,"148":28,"149":54,"159":3,"168":1,"169":3,"177":3,"184":3,"185":3,"186":1,"193":14,"194":10,"195":8,"202":9,"203":5,"204":3,"213":5,"214":8,"224":3,"225":4,"237":33,"238":29,"239":29,"250":3,"251":4,"261":7,"262":3,"273":3,"274":4,"284":117,"285":115,"286":115,"288":115,"289":115,"296":10,"297":10,"298":6,"299":6,"307":10},"path":"/home/node/project/contracts/registry/UserRegistry.sol","s":{"1":49,"2":112,"3":4,"4":10,"5":3,"6":3,"7":3,"8":0,"9":7,"10":15,"11":4,"12":4,"13":3,"14":3,"15":1,"16":2,"17":86,"18":82,"19":78,"20":78,"21":30,"22":28,"23":54,"24":3,"25":1,"26":3,"27":3,"28":3,"29":3,"30":1,"31":14,"32":10,"33":8,"34":9,"35":5,"36":3,"37":5,"38":8,"39":3,"40":4,"41":33,"42":29,"43":29,"44":3,"45":4,"46":7,"47":3,"48":3,"49":4,"50":117,"51":115,"52":115,"53":115,"54":115,"55":10,"56":10,"57":6,"58":10},"b":{"1":[3,0],"2":[82,4],"3":[78,4],"4":[28,2],"5":[1,2],"6":[10,4],"7":[8,2],"8":[5,4],"9":[3,2],"10":[29,4],"11":[3,4],"12":[115,2],"13":[6,4]},"f":{"1":49,"2":4,"3":10,"4":3,"5":7,"6":15,"7":4,"8":4,"9":3,"10":3,"11":1,"12":86,"13":30,"14":3,"15":1,"16":3,"17":3,"18":14,"19":9,"20":5,"21":3,"22":33,"23":3,"24":7,"25":3,"26":117,"27":10,"28":10},"fnMap":{"1":{"name":"constructor","line":40,"loc":{"start":{"line":40,"column":2},"end":{"line":40,"column":74}}},"2":{"name":"userCount","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":49,"column":61}}},"3":{"name":"userId","line":56,"loc":{"start":{"line":56,"column":2},"end":{"line":56,"column":74}}},"4":{"name":"validUserId","line":63,"loc":{"start":{"line":63,"column":2},"end":{"line":63,"column":79}}},"5":{"name":"validUntilTime","line":74,"loc":{"start":{"line":74,"column":2},"end":{"line":74,"column":81}}},"6":{"name":"suspended","line":81,"loc":{"start":{"line":81,"column":2},"end":{"line":81,"column":73}}},"7":{"name":"extended","line":88,"loc":{"start":{"line":88,"column":2},"end":{"line":90,"column":3}}},"8":{"name":"isAddressValid","line":97,"loc":{"start":{"line":97,"column":2},"end":{"line":97,"column":79}}},"9":{"name":"isValid","line":104,"loc":{"start":{"line":104,"column":2},"end":{"line":104,"column":71}}},"10":{"name":"registerUser","line":112,"loc":{"start":{"line":112,"column":31},"end":{"line":113,"column":3}}},"11":{"name":"registerManyUsers","line":121,"loc":{"start":{"line":121,"column":31},"end":{"line":122,"column":3}}},"12":{"name":"attachAddress","line":132,"loc":{"start":{"line":132,"column":31},"end":{"line":133,"column":3}}},"13":{"name":"attachManyAddresses","line":145,"loc":{"start":{"line":145,"column":31},"end":{"line":146,"column":3}}},"14":{"name":"detachAddress","line":157,"loc":{"start":{"line":157,"column":31},"end":{"line":158,"column":3}}},"15":{"name":"detachManyAddresses","line":166,"loc":{"start":{"line":166,"column":31},"end":{"line":167,"column":3}}},"16":{"name":"detachSelf","line":176,"loc":{"start":{"line":176,"column":2},"end":{"line":176,"column":39}}},"17":{"name":"detachSelfAddress","line":183,"loc":{"start":{"line":183,"column":2},"end":{"line":183,"column":62}}},"18":{"name":"suspendUser","line":192,"loc":{"start":{"line":192,"column":67},"end":{"line":192,"column":3}}},"19":{"name":"unsuspendUser","line":201,"loc":{"start":{"line":201,"column":69},"end":{"line":201,"column":3}}},"20":{"name":"suspendManyUsers","line":211,"loc":{"start":{"line":211,"column":31},"end":{"line":212,"column":3}}},"21":{"name":"unsuspendManyUsers","line":222,"loc":{"start":{"line":222,"column":31},"end":{"line":223,"column":3}}},"22":{"name":"updateUser","line":235,"loc":{"start":{"line":235,"column":48},"end":{"line":236,"column":3}}},"23":{"name":"updateManyUsers","line":248,"loc":{"start":{"line":248,"column":48},"end":{"line":249,"column":3}}},"24":{"name":"updateUserExtended","line":259,"loc":{"start":{"line":259,"column":31},"end":{"line":260,"column":3}}},"25":{"name":"updateManyUsersExtended","line":271,"loc":{"start":{"line":271,"column":47},"end":{"line":272,"column":3}}},"26":{"name":"registerUserInternal","line":281,"loc":{"start":{"line":281,"column":2},"end":{"line":283,"column":3}}},"27":{"name":"detachAddressInternal","line":295,"loc":{"start":{"line":295,"column":2},"end":{"line":295,"column":59}}},"28":{"name":"isValidInternal","line":305,"loc":{"start":{"line":305,"column":2},"end":{"line":305,"column":74}}}},"statementMap":{"1":{"start":{"line":41,"column":4},"end":{"line":41,"column":1016}},"2":{"start":{"line":42,"column":6},"end":{"line":42,"column":57}},"3":{"start":{"line":50,"column":4},"end":{"line":50,"column":21}},"4":{"start":{"line":57,"column":4},"end":{"line":57,"column":33}},"5":{"start":{"line":64,"column":4},"end":{"line":64,"column":50}},"6":{"start":{"line":65,"column":4},"end":{"line":65,"column":1689}},"7":{"start":{"line":66,"column":6},"end":{"line":66,"column":26}},"8":{"start":{"line":68,"column":4},"end":{"line":68,"column":12}},"9":{"start":{"line":75,"column":4},"end":{"line":75,"column":40}},"10":{"start":{"line":82,"column":4},"end":{"line":82,"column":35}},"11":{"start":{"line":91,"column":4},"end":{"line":91,"column":40}},"12":{"start":{"line":98,"column":4},"end":{"line":98,"column":57}},"13":{"start":{"line":105,"column":4},"end":{"line":105,"column":42}},"14":{"start":{"line":114,"column":4},"end":{"line":114,"column":50}},"15":{"start":{"line":123,"column":4},"end":{"line":123,"column":3080}},"16":{"start":{"line":124,"column":6},"end":{"line":124,"column":57}},"17":{"start":{"line":134,"column":4},"end":{"line":134,"column":56}},"18":{"start":{"line":135,"column":4},"end":{"line":135,"column":47}},"19":{"start":{"line":136,"column":4},"end":{"line":136,"column":35}},"20":{"start":{"line":138,"column":4},"end":{"line":138,"column":43}},"21":{"start":{"line":147,"column":4},"end":{"line":147,"column":56}},"22":{"start":{"line":148,"column":4},"end":{"line":148,"column":3793}},"23":{"start":{"line":149,"column":6},"end":{"line":149,"column":46}},"24":{"start":{"line":159,"column":4},"end":{"line":159,"column":34}},"25":{"start":{"line":168,"column":4},"end":{"line":168,"column":4304}},"26":{"start":{"line":169,"column":6},"end":{"line":169,"column":41}},"27":{"start":{"line":177,"column":4},"end":{"line":177,"column":36}},"28":{"start":{"line":184,"column":4},"end":{"line":184,"column":51}},"29":{"start":{"line":185,"column":4},"end":{"line":185,"column":58}},"30":{"start":{"line":186,"column":4},"end":{"line":186,"column":34}},"31":{"start":{"line":193,"column":4},"end":{"line":193,"column":56}},"32":{"start":{"line":194,"column":4},"end":{"line":194,"column":45}},"33":{"start":{"line":195,"column":4},"end":{"line":195,"column":34}},"34":{"start":{"line":202,"column":4},"end":{"line":202,"column":56}},"35":{"start":{"line":203,"column":4},"end":{"line":203,"column":44}},"36":{"start":{"line":204,"column":4},"end":{"line":204,"column":35}},"37":{"start":{"line":213,"column":4},"end":{"line":213,"column":5525}},"38":{"start":{"line":214,"column":6},"end":{"line":214,"column":29}},"39":{"start":{"line":224,"column":4},"end":{"line":224,"column":5757}},"40":{"start":{"line":225,"column":6},"end":{"line":225,"column":31}},"41":{"start":{"line":237,"column":4},"end":{"line":237,"column":56}},"42":{"start":{"line":238,"column":4},"end":{"line":238,"column":50}},"43":{"start":{"line":239,"column":4},"end":{"line":239,"column":40}},"44":{"start":{"line":250,"column":4},"end":{"line":250,"column":6359}},"45":{"start":{"line":251,"column":6},"end":{"line":251,"column":57}},"46":{"start":{"line":261,"column":4},"end":{"line":261,"column":56}},"47":{"start":{"line":262,"column":4},"end":{"line":262,"column":41}},"48":{"start":{"line":273,"column":4},"end":{"line":273,"column":6958}},"49":{"start":{"line":274,"column":6},"end":{"line":274,"column":50}},"50":{"start":{"line":284,"column":4},"end":{"line":284,"column":47}},"51":{"start":{"line":285,"column":4},"end":{"line":285,"column":53}},"52":{"start":{"line":286,"column":4},"end":{"line":286,"column":38}},"53":{"start":{"line":288,"column":4},"end":{"line":288,"column":35}},"54":{"start":{"line":289,"column":4},"end":{"line":289,"column":46}},"55":{"start":{"line":296,"column":4},"end":{"line":296,"column":50}},"56":{"start":{"line":297,"column":4},"end":{"line":297,"column":38}},"57":{"start":{"line":298,"column":4},"end":{"line":298,"column":49}},"58":{"start":{"line":307,"column":4},"end":{"line":307,"column":55}}},"branchMap":{"1":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":4},"end":{"line":65,"column":4}},{"start":{"line":65,"column":4},"end":{"line":65,"column":4}}]},"2":{"line":134,"type":"if","locations":[{"start":{"line":134,"column":4},"end":{"line":134,"column":4}},{"start":{"line":134,"column":4},"end":{"line":134,"column":4}}]},"3":{"line":135,"type":"if","locations":[{"start":{"line":135,"column":4},"end":{"line":135,"column":4}},{"start":{"line":135,"column":4},"end":{"line":135,"column":4}}]},"4":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":147,"column":4}},{"start":{"line":147,"column":4},"end":{"line":147,"column":4}}]},"5":{"line":185,"type":"if","locations":[{"start":{"line":185,"column":4},"end":{"line":185,"column":4}},{"start":{"line":185,"column":4},"end":{"line":185,"column":4}}]},"6":{"line":193,"type":"if","locations":[{"start":{"line":193,"column":4},"end":{"line":193,"column":4}},{"start":{"line":193,"column":4},"end":{"line":193,"column":4}}]},"7":{"line":194,"type":"if","locations":[{"start":{"line":194,"column":4},"end":{"line":194,"column":4}},{"start":{"line":194,"column":4},"end":{"line":194,"column":4}}]},"8":{"line":202,"type":"if","locations":[{"start":{"line":202,"column":4},"end":{"line":202,"column":4}},{"start":{"line":202,"column":4},"end":{"line":202,"column":4}}]},"9":{"line":203,"type":"if","locations":[{"start":{"line":203,"column":4},"end":{"line":203,"column":4}},{"start":{"line":203,"column":4},"end":{"line":203,"column":4}}]},"10":{"line":237,"type":"if","locations":[{"start":{"line":237,"column":4},"end":{"line":237,"column":4}},{"start":{"line":237,"column":4},"end":{"line":237,"column":4}}]},"11":{"line":261,"type":"if","locations":[{"start":{"line":261,"column":4},"end":{"line":261,"column":4}},{"start":{"line":261,"column":4},"end":{"line":261,"column":4}}]},"12":{"line":284,"type":"if","locations":[{"start":{"line":284,"column":4},"end":{"line":284,"column":4}},{"start":{"line":284,"column":4},"end":{"line":284,"column":4}}]},"13":{"line":297,"type":"if","locations":[{"start":{"line":297,"column":4},"end":{"line":297,"column":4}},{"start":{"line":297,"column":4},"end":{"line":297,"column":4}}]}}},"contracts/routing/BasicRouter.sol":{"l":{"34":0,"35":0,"39":0,"43":0,"47":0,"51":0,"55":0,"59":0,"66":0,"67":0,"77":0,"78":0,"79":0,"85":0,"86":0,"88":0,"95":0,"96":0,"105":0,"106":0,"107":0,"109":0,"111":0,"112":0,"113":0,"114":0,"115":0,"117":0,"120":0},"path":"/home/node/project/contracts/routing/BasicRouter.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},"fnMap":{"1":{"name":"configNotLocked","line":33,"loc":{"start":{"line":33,"column":2},"end":{"line":33,"column":28}}},"2":{"name":null,"line":38,"loc":{"start":{"line":38,"column":2},"end":{"line":38,"column":37}}},"3":{"name":null,"line":42,"loc":{"start":{"line":42,"column":2},"end":{"line":42,"column":38}}},"4":{"name":"destinations","line":46,"loc":{"start":{"line":46,"column":2},"end":{"line":46,"column":88}}},"5":{"name":"activeDestination","line":50,"loc":{"start":{"line":50,"column":2},"end":{"line":50,"column":75}}},"6":{"name":"destinationAbi","line":54,"loc":{"start":{"line":54,"column":2},"end":{"line":54,"column":80}}},"7":{"name":"isConfigLocked","line":58,"loc":{"start":{"line":58,"column":2},"end":{"line":58,"column":63}}},"8":{"name":"findDestination","line":65,"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":81}}},"9":{"name":"setRoute","line":75,"loc":{"start":{"line":75,"column":44},"end":{"line":76,"column":3}}},"10":{"name":"switchDestination","line":83,"loc":{"start":{"line":83,"column":19},"end":{"line":84,"column":3}}},"11":{"name":"lockConfig","line":94,"loc":{"start":{"line":94,"column":64},"end":{"line":94,"column":3}}},"12":{"name":"callPayable","line":103,"loc":{"start":{"line":103,"column":2},"end":{"line":104,"column":3}}}},"statementMap":{"1":{"start":{"line":34,"column":4},"end":{"line":34,"column":34}},"2":{"start":{"line":39,"column":4},"end":{"line":39,"column":47}},"3":{"start":{"line":43,"column":4},"end":{"line":43,"column":47}},"4":{"start":{"line":47,"column":4},"end":{"line":47,"column":39}},"5":{"start":{"line":51,"column":4},"end":{"line":51,"column":44}},"6":{"start":{"line":55,"column":4},"end":{"line":55,"column":41}},"7":{"start":{"line":59,"column":4},"end":{"line":59,"column":24}},"8":{"start":{"line":66,"column":4},"end":{"line":66,"column":40}},"9":{"start":{"line":67,"column":4},"end":{"line":67,"column":1721}},"10":{"start":{"line":77,"column":4},"end":{"line":77,"column":61}},"11":{"start":{"line":78,"column":4},"end":{"line":78,"column":62}},"12":{"start":{"line":79,"column":4},"end":{"line":79,"column":15}},"13":{"start":{"line":85,"column":4},"end":{"line":85,"column":76}},"14":{"start":{"line":86,"column":4},"end":{"line":86,"column":57}},"15":{"start":{"line":88,"column":4},"end":{"line":88,"column":57}},"16":{"start":{"line":95,"column":4},"end":{"line":95,"column":23}},"17":{"start":{"line":96,"column":4},"end":{"line":96,"column":23}},"18":{"start":{"line":105,"column":4},"end":{"line":105,"column":33}},"19":{"start":{"line":106,"column":4},"end":{"line":106,"column":50}},"20":{"start":{"line":107,"column":4},"end":{"line":107,"column":45}},"21":{"start":{"line":109,"column":4},"end":{"line":109,"column":59}},"22":{"start":{"line":111,"column":4},"end":{"line":111,"column":16}},"23":{"start":{"line":112,"column":4},"end":{"line":112,"column":23}},"24":{"start":{"line":113,"column":4},"end":{"line":113,"column":3080}},"25":{"start":{"line":114,"column":6},"end":{"line":114,"column":77}},"26":{"start":{"line":115,"column":6},"end":{"line":115,"column":69}},"27":{"start":{"line":117,"column":6},"end":{"line":117,"column":63}},"28":{"start":{"line":120,"column":4},"end":{"line":120,"column":27}}},"branchMap":{"1":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":34,"column":4}},{"start":{"line":34,"column":4},"end":{"line":34,"column":4}}]},"2":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":4},"end":{"line":85,"column":4}},{"start":{"line":85,"column":4},"end":{"line":85,"column":4}}]},"3":{"line":105,"type":"if","locations":[{"start":{"line":105,"column":4},"end":{"line":105,"column":4}},{"start":{"line":105,"column":4},"end":{"line":105,"column":4}}]},"4":{"line":107,"type":"if","locations":[{"start":{"line":107,"column":4},"end":{"line":107,"column":4}},{"start":{"line":107,"column":4},"end":{"line":107,"column":4}}]},"5":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":4},"end":{"line":113,"column":4}},{"start":{"line":113,"column":4},"end":{"line":113,"column":4}}]},"6":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":4},"end":{"line":120,"column":4}},{"start":{"line":120,"column":4},"end":{"line":120,"column":4}}]}}},"contracts/routing/DynamicRouter.sol":{"l":{"29":0,"33":0,"37":0,"38":0,"40":0,"41":0,"42":0,"43":0,"45":0,"46":0,"47":0,"50":0,"51":0,"53":0,"54":0,"55":0,"56":0,"61":0,"69":0,"72":0,"73":0,"75":0},"path":"/home/node/project/contracts/routing/DynamicRouter.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0},"fnMap":{"1":{"name":"maxBalances","line":28,"loc":{"start":{"line":28,"column":2},"end":{"line":28,"column":78}}},"2":{"name":"weights","line":32,"loc":{"start":{"line":32,"column":2},"end":{"line":32,"column":74}}},"3":{"name":"findDestination","line":36,"loc":{"start":{"line":36,"column":2},"end":{"line":36,"column":82}}},"4":{"name":"setDistribution","line":68,"loc":{"start":{"line":68,"column":35},"end":{"line":68,"column":18}}}},"statementMap":{"1":{"start":{"line":29,"column":4},"end":{"line":29,"column":45}},"2":{"start":{"line":33,"column":4},"end":{"line":33,"column":41}},"3":{"start":{"line":37,"column":4},"end":{"line":37,"column":61}},"4":{"start":{"line":38,"column":4},"end":{"line":38,"column":40}},"5":{"start":{"line":40,"column":4},"end":{"line":40,"column":44}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":44}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":1156}},"8":{"start":{"line":43,"column":6},"end":{"line":43,"column":49}},"9":{"start":{"line":45,"column":6},"end":{"line":45,"column":1271}},"10":{"start":{"line":46,"column":8},"end":{"line":46,"column":40}},"11":{"start":{"line":50,"column":5},"end":{"line":50,"column":1375}},"12":{"start":{"line":51,"column":8},"end":{"line":51,"column":1503}},"13":{"start":{"line":53,"column":8},"end":{"line":53,"column":62}},"14":{"start":{"line":54,"column":8},"end":{"line":54,"column":1602}},"15":{"start":{"line":55,"column":10},"end":{"line":55,"column":45}},"16":{"start":{"line":56,"column":10},"end":{"line":56,"column":42}},"17":{"start":{"line":61,"column":4},"end":{"line":61,"column":30}},"18":{"start":{"line":69,"column":4},"end":{"line":69,"column":2040}},"19":{"start":{"line":72,"column":4},"end":{"line":72,"column":64}},"20":{"start":{"line":73,"column":4},"end":{"line":73,"column":52}},"21":{"start":{"line":75,"column":4},"end":{"line":75,"column":15}}},"branchMap":{"1":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":6},"end":{"line":45,"column":6}},{"start":{"line":45,"column":6},"end":{"line":45,"column":6}}]},"2":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":5},"end":{"line":50,"column":5}},{"start":{"line":50,"column":5},"end":{"line":50,"column":5}}]},"3":{"line":54,"type":"if","locations":[{"start":{"line":54,"column":8},"end":{"line":54,"column":8}},{"start":{"line":54,"column":8},"end":{"line":54,"column":8}}]},"4":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":4},"end":{"line":69,"column":4}},{"start":{"line":69,"column":4},"end":{"line":69,"column":4}}]}}},"contracts/routing/ScheduledRouter.sol":{"l":{"28":0,"29":0,"33":0,"34":0,"35":0,"37":0,"42":0,"43":0,"44":0},"path":"/home/node/project/contracts/routing/ScheduledRouter.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0},"b":{"1":[0,0],"2":[0,0]},"f":{"1":0,"2":0,"3":0},"fnMap":{"1":{"name":"schedule","line":27,"loc":{"start":{"line":27,"column":2},"end":{"line":27,"column":75}}},"2":{"name":"findDestination","line":32,"loc":{"start":{"line":32,"column":2},"end":{"line":32,"column":90}}},"3":{"name":"setRouteSchedule","line":41,"loc":{"start":{"line":41,"column":35},"end":{"line":41,"column":18}}}},"statementMap":{"1":{"start":{"line":28,"column":4},"end":{"line":28,"column":50}},"2":{"start":{"line":29,"column":4},"end":{"line":29,"column":47}},"3":{"start":{"line":33,"column":4},"end":{"line":33,"column":50}},"4":{"start":{"line":34,"column":4},"end":{"line":34,"column":818}},"5":{"start":{"line":35,"column":6},"end":{"line":35,"column":23}},"6":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":55}},"8":{"start":{"line":43,"column":4},"end":{"line":43,"column":50}},"9":{"start":{"line":44,"column":4},"end":{"line":44,"column":36}}},"branchMap":{"1":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":34,"column":4}},{"start":{"line":34,"column":4},"end":{"line":34,"column":4}}]},"2":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":42,"column":4}},{"start":{"line":42,"column":4},"end":{"line":42,"column":4}}]}}},"contracts/token/DummyToken.sol":{"l":{"35":0,"36":0,"37":0,"38":0,"39":0,"41":0,"42":0,"46":0,"50":0,"54":0,"58":0,"62":0,"66":0,"70":0,"74":0,"78":0,"84":0,"88":0,"89":0,"91":0,"92":0,"93":0,"94":0,"100":0,"101":0,"102":0,"104":0,"105":0,"106":0,"107":0,"108":0,"112":0,"113":0,"114":0,"120":0,"122":0,"123":0,"129":0,"130":0,"131":0,"133":0,"135":0,"136":0,"140":0,"141":0,"142":0,"146":0,"150":0,"154":0,"155":0,"159":0,"163":0,"167":0,"168":0,"170":0,"171":0,"172":0,"176":0,"177":0},"path":"/home/node/project/contracts/token/DummyToken.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0},"fnMap":{"1":{"name":"constructor","line":29,"loc":{"start":{"line":29,"column":2},"end":{"line":34,"column":3}}},"2":{"name":"name","line":45,"loc":{"start":{"line":45,"column":2},"end":{"line":45,"column":62}}},"3":{"name":"symbol","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":49,"column":64}}},"4":{"name":"decimal","line":53,"loc":{"start":{"line":53,"column":2},"end":{"line":53,"column":59}}},"5":{"name":"totalSupply","line":57,"loc":{"start":{"line":57,"column":2},"end":{"line":57,"column":63}}},"6":{"name":"balanceOf","line":61,"loc":{"start":{"line":61,"column":2},"end":{"line":61,"column":75}}},"7":{"name":"rate","line":65,"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":47}}},"8":{"name":"rateAt","line":69,"loc":{"start":{"line":69,"column":2},"end":{"line":69,"column":49}}},"9":{"name":"interest","line":73,"loc":{"start":{"line":73,"column":2},"end":{"line":73,"column":51}}},"10":{"name":"twin","line":77,"loc":{"start":{"line":77,"column":2},"end":{"line":77,"column":46}}},"11":{"name":"allowance","line":81,"loc":{"start":{"line":81,"column":2},"end":{"line":83,"column":3}}},"12":{"name":"transfer","line":87,"loc":{"start":{"line":87,"column":2},"end":{"line":87,"column":79}}},"13":{"name":"transferFrom","line":97,"loc":{"start":{"line":97,"column":2},"end":{"line":99,"column":3}}},"14":{"name":"approve","line":111,"loc":{"start":{"line":111,"column":2},"end":{"line":111,"column":83}}},"15":{"name":"increaseApproval","line":117,"loc":{"start":{"line":117,"column":2},"end":{"line":119,"column":3}}},"16":{"name":"decreaseApproval","line":126,"loc":{"start":{"line":126,"column":2},"end":{"line":128,"column":3}}},"17":{"name":"updateToken","line":139,"loc":{"start":{"line":139,"column":2},"end":{"line":139,"column":91}}},"18":{"name":"updateSupply","line":145,"loc":{"start":{"line":145,"column":2},"end":{"line":145,"column":52}}},"19":{"name":"updateBalance","line":149,"loc":{"start":{"line":149,"column":2},"end":{"line":149,"column":65}}},"20":{"name":"updateRate","line":153,"loc":{"start":{"line":153,"column":2},"end":{"line":153,"column":43}}},"21":{"name":"updateTwin","line":158,"loc":{"start":{"line":158,"column":2},"end":{"line":158,"column":42}}},"22":{"name":"createTwin","line":162,"loc":{"start":{"line":162,"column":2},"end":{"line":162,"column":30}}},"23":{"name":"transferNoEvent","line":166,"loc":{"start":{"line":166,"column":2},"end":{"line":166,"column":77}}},"24":{"name":"transferTwin","line":175,"loc":{"start":{"line":175,"column":2},"end":{"line":175,"column":74}}}},"statementMap":{"1":{"start":{"line":35,"column":4},"end":{"line":35,"column":16}},"2":{"start":{"line":36,"column":4},"end":{"line":36,"column":20}},"3":{"start":{"line":37,"column":4},"end":{"line":37,"column":22}},"4":{"start":{"line":38,"column":4},"end":{"line":38,"column":30}},"5":{"start":{"line":39,"column":4},"end":{"line":39,"column":38}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":12}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":16}},"8":{"start":{"line":46,"column":4},"end":{"line":46,"column":16}},"9":{"start":{"line":50,"column":4},"end":{"line":50,"column":18}},"10":{"start":{"line":54,"column":4},"end":{"line":54,"column":19}},"11":{"start":{"line":58,"column":4},"end":{"line":58,"column":48}},"12":{"start":{"line":62,"column":4},"end":{"line":62,"column":52}},"13":{"start":{"line":66,"column":4},"end":{"line":66,"column":16}},"14":{"start":{"line":70,"column":4},"end":{"line":70,"column":18}},"15":{"start":{"line":74,"column":4},"end":{"line":74,"column":43}},"16":{"start":{"line":78,"column":4},"end":{"line":78,"column":16}},"17":{"start":{"line":84,"column":4},"end":{"line":84,"column":36}},"18":{"start":{"line":88,"column":4},"end":{"line":88,"column":29}},"19":{"start":{"line":89,"column":4},"end":{"line":89,"column":42}},"20":{"start":{"line":91,"column":4},"end":{"line":91,"column":58}},"21":{"start":{"line":92,"column":4},"end":{"line":92,"column":44}},"22":{"start":{"line":93,"column":4},"end":{"line":93,"column":42}},"23":{"start":{"line":94,"column":4},"end":{"line":94,"column":15}},"24":{"start":{"line":100,"column":4},"end":{"line":100,"column":29}},"25":{"start":{"line":101,"column":4},"end":{"line":101,"column":37}},"26":{"start":{"line":102,"column":4},"end":{"line":102,"column":48}},"27":{"start":{"line":104,"column":4},"end":{"line":104,"column":48}},"28":{"start":{"line":105,"column":4},"end":{"line":105,"column":44}},"29":{"start":{"line":106,"column":4},"end":{"line":106,"column":70}},"30":{"start":{"line":107,"column":4},"end":{"line":107,"column":37}},"31":{"start":{"line":108,"column":4},"end":{"line":108,"column":15}},"32":{"start":{"line":112,"column":4},"end":{"line":112,"column":41}},"33":{"start":{"line":113,"column":4},"end":{"line":113,"column":47}},"34":{"start":{"line":114,"column":4},"end":{"line":114,"column":15}},"35":{"start":{"line":120,"column":4},"end":{"line":120,"column":3026}},"36":{"start":{"line":122,"column":4},"end":{"line":122,"column":70}},"37":{"start":{"line":123,"column":4},"end":{"line":123,"column":15}},"38":{"start":{"line":129,"column":4},"end":{"line":129,"column":49}},"39":{"start":{"line":130,"column":4},"end":{"line":130,"column":3324}},"40":{"start":{"line":131,"column":6},"end":{"line":131,"column":38}},"41":{"start":{"line":133,"column":6},"end":{"line":133,"column":67}},"42":{"start":{"line":135,"column":4},"end":{"line":135,"column":70}},"43":{"start":{"line":136,"column":4},"end":{"line":136,"column":15}},"44":{"start":{"line":140,"column":4},"end":{"line":140,"column":16}},"45":{"start":{"line":141,"column":4},"end":{"line":141,"column":20}},"46":{"start":{"line":142,"column":4},"end":{"line":142,"column":22}},"47":{"start":{"line":146,"column":4},"end":{"line":146,"column":30}},"48":{"start":{"line":150,"column":4},"end":{"line":150,"column":30}},"49":{"start":{"line":154,"column":4},"end":{"line":154,"column":16}},"50":{"start":{"line":155,"column":4},"end":{"line":155,"column":16}},"51":{"start":{"line":159,"column":4},"end":{"line":159,"column":16}},"52":{"start":{"line":163,"column":4},"end":{"line":163,"column":65}},"53":{"start":{"line":167,"column":4},"end":{"line":167,"column":29}},"54":{"start":{"line":168,"column":4},"end":{"line":168,"column":42}},"55":{"start":{"line":170,"column":4},"end":{"line":170,"column":58}},"56":{"start":{"line":171,"column":4},"end":{"line":171,"column":44}},"57":{"start":{"line":172,"column":4},"end":{"line":172,"column":15}},"58":{"start":{"line":176,"column":4},"end":{"line":176,"column":40}},"59":{"start":{"line":177,"column":4},"end":{"line":177,"column":38}}},"branchMap":{"1":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":4},"end":{"line":88,"column":4}},{"start":{"line":88,"column":4},"end":{"line":88,"column":4}}]},"2":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":4},"end":{"line":89,"column":4}},{"start":{"line":89,"column":4},"end":{"line":89,"column":4}}]},"3":{"line":100,"type":"if","locations":[{"start":{"line":100,"column":4},"end":{"line":100,"column":4}},{"start":{"line":100,"column":4},"end":{"line":100,"column":4}}]},"4":{"line":101,"type":"if","locations":[{"start":{"line":101,"column":4},"end":{"line":101,"column":4}},{"start":{"line":101,"column":4},"end":{"line":101,"column":4}}]},"5":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":4},"end":{"line":102,"column":4}},{"start":{"line":102,"column":4},"end":{"line":102,"column":4}}]},"6":{"line":130,"type":"if","locations":[{"start":{"line":130,"column":4},"end":{"line":130,"column":4}},{"start":{"line":130,"column":4},"end":{"line":130,"column":4}}]},"7":{"line":167,"type":"if","locations":[{"start":{"line":167,"column":4},"end":{"line":167,"column":4}},{"start":{"line":167,"column":4},"end":{"line":167,"column":4}}]},"8":{"line":168,"type":"if","locations":[{"start":{"line":168,"column":4},"end":{"line":168,"column":4}},{"start":{"line":168,"column":4},"end":{"line":168,"column":4}}]},"9":{"line":176,"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":4}},{"start":{"line":176,"column":4},"end":{"line":176,"column":4}}]}}},"contracts/token/ERC20Token.sol":{"l":{"30":17,"31":17,"32":17,"33":17,"34":17,"38":1,"42":1,"46":1,"50":2,"54":4,"60":1,"65":5,"66":5,"68":5,"69":5,"70":5,"71":5,"77":3,"78":3,"79":3,"81":1,"82":1,"83":1,"84":1,"85":1,"91":6,"92":6,"93":6,"99":1,"101":1,"102":1,"108":2,"109":2,"110":0,"112":2,"114":2,"115":2},"path":"/home/node/project/contracts/token/ERC20Token.sol","s":{"1":17,"2":17,"3":17,"4":17,"5":17,"6":1,"7":1,"8":1,"9":2,"10":4,"11":1,"12":5,"13":5,"14":5,"15":5,"16":5,"17":5,"18":3,"19":3,"20":3,"21":1,"22":1,"23":1,"24":1,"25":1,"26":6,"27":6,"28":6,"29":1,"30":1,"31":1,"32":2,"33":2,"34":0,"35":2,"36":2,"37":2},"b":{"1":[5,0],"2":[5,0],"3":[3,0],"4":[3,0],"5":[1,2],"6":[0,2]},"f":{"1":17,"2":1,"3":1,"4":1,"5":2,"6":4,"7":1,"8":5,"9":3,"10":6,"11":1,"12":2},"fnMap":{"1":{"name":"constructor","line":24,"loc":{"start":{"line":24,"column":2},"end":{"line":29,"column":3}}},"2":{"name":"name","line":37,"loc":{"start":{"line":37,"column":2},"end":{"line":37,"column":62}}},"3":{"name":"symbol","line":41,"loc":{"start":{"line":41,"column":2},"end":{"line":41,"column":64}}},"4":{"name":"decimal","line":45,"loc":{"start":{"line":45,"column":2},"end":{"line":45,"column":59}}},"5":{"name":"totalSupply","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":49,"column":63}}},"6":{"name":"balanceOf","line":53,"loc":{"start":{"line":53,"column":2},"end":{"line":53,"column":75}}},"7":{"name":"allowance","line":57,"loc":{"start":{"line":57,"column":2},"end":{"line":59,"column":3}}},"8":{"name":"transfer","line":63,"loc":{"start":{"line":63,"column":2},"end":{"line":64,"column":36}}},"9":{"name":"transferFrom","line":74,"loc":{"start":{"line":74,"column":2},"end":{"line":76,"column":3}}},"10":{"name":"approve","line":88,"loc":{"start":{"line":88,"column":2},"end":{"line":90,"column":3}}},"11":{"name":"increaseApproval","line":96,"loc":{"start":{"line":96,"column":2},"end":{"line":98,"column":3}}},"12":{"name":"decreaseApproval","line":105,"loc":{"start":{"line":105,"column":2},"end":{"line":107,"column":3}}}},"statementMap":{"1":{"start":{"line":30,"column":4},"end":{"line":30,"column":16}},"2":{"start":{"line":31,"column":4},"end":{"line":31,"column":20}},"3":{"start":{"line":32,"column":4},"end":{"line":32,"column":22}},"4":{"start":{"line":33,"column":4},"end":{"line":33,"column":30}},"5":{"start":{"line":34,"column":4},"end":{"line":34,"column":38}},"6":{"start":{"line":38,"column":4},"end":{"line":38,"column":16}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":18}},"8":{"start":{"line":46,"column":4},"end":{"line":46,"column":19}},"9":{"start":{"line":50,"column":4},"end":{"line":50,"column":23}},"10":{"start":{"line":54,"column":4},"end":{"line":54,"column":27}},"11":{"start":{"line":60,"column":4},"end":{"line":60,"column":36}},"12":{"start":{"line":65,"column":4},"end":{"line":65,"column":29}},"13":{"start":{"line":66,"column":4},"end":{"line":66,"column":42}},"14":{"start":{"line":68,"column":4},"end":{"line":68,"column":58}},"15":{"start":{"line":69,"column":4},"end":{"line":69,"column":44}},"16":{"start":{"line":70,"column":4},"end":{"line":70,"column":42}},"17":{"start":{"line":71,"column":4},"end":{"line":71,"column":15}},"18":{"start":{"line":77,"column":4},"end":{"line":77,"column":29}},"19":{"start":{"line":78,"column":4},"end":{"line":78,"column":37}},"20":{"start":{"line":79,"column":4},"end":{"line":79,"column":48}},"21":{"start":{"line":81,"column":4},"end":{"line":81,"column":48}},"22":{"start":{"line":82,"column":4},"end":{"line":82,"column":44}},"23":{"start":{"line":83,"column":4},"end":{"line":83,"column":70}},"24":{"start":{"line":84,"column":4},"end":{"line":84,"column":37}},"25":{"start":{"line":85,"column":4},"end":{"line":85,"column":15}},"26":{"start":{"line":91,"column":4},"end":{"line":91,"column":41}},"27":{"start":{"line":92,"column":4},"end":{"line":92,"column":47}},"28":{"start":{"line":93,"column":4},"end":{"line":93,"column":15}},"29":{"start":{"line":99,"column":4},"end":{"line":99,"column":2581}},"30":{"start":{"line":101,"column":4},"end":{"line":101,"column":70}},"31":{"start":{"line":102,"column":4},"end":{"line":102,"column":15}},"32":{"start":{"line":108,"column":4},"end":{"line":108,"column":49}},"33":{"start":{"line":109,"column":4},"end":{"line":109,"column":2879}},"34":{"start":{"line":110,"column":6},"end":{"line":110,"column":38}},"35":{"start":{"line":112,"column":6},"end":{"line":112,"column":67}},"36":{"start":{"line":114,"column":4},"end":{"line":114,"column":70}},"37":{"start":{"line":115,"column":4},"end":{"line":115,"column":15}}},"branchMap":{"1":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":4},"end":{"line":65,"column":4}},{"start":{"line":65,"column":4},"end":{"line":65,"column":4}}]},"2":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":4},"end":{"line":66,"column":4}},{"start":{"line":66,"column":4},"end":{"line":66,"column":4}}]},"3":{"line":77,"type":"if","locations":[{"start":{"line":77,"column":4},"end":{"line":77,"column":4}},{"start":{"line":77,"column":4},"end":{"line":77,"column":4}}]},"4":{"line":78,"type":"if","locations":[{"start":{"line":78,"column":4},"end":{"line":78,"column":4}},{"start":{"line":78,"column":4},"end":{"line":78,"column":4}}]},"5":{"line":79,"type":"if","locations":[{"start":{"line":79,"column":4},"end":{"line":79,"column":4}},{"start":{"line":79,"column":4},"end":{"line":79,"column":4}}]},"6":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":4},"end":{"line":109,"column":4}},{"start":{"line":109,"column":4},"end":{"line":109,"column":4}}]}}}}
\ No newline at end of file
diff --git a/coverage/base.css b/coverage/base.css
deleted file mode 100644
index 29737bc..0000000
--- a/coverage/base.css
+++ /dev/null
@@ -1,213 +0,0 @@
-body, html {
- margin:0; padding: 0;
- height: 100%;
-}
-body {
- font-family: Helvetica Neue, Helvetica, Arial;
- font-size: 14px;
- color:#333;
-}
-.small { font-size: 12px; }
-*, *:after, *:before {
- -webkit-box-sizing:border-box;
- -moz-box-sizing:border-box;
- box-sizing:border-box;
- }
-h1 { font-size: 20px; margin: 0;}
-h2 { font-size: 14px; }
-pre {
- font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
- margin: 0;
- padding: 0;
- -moz-tab-size: 2;
- -o-tab-size: 2;
- tab-size: 2;
-}
-a { color:#0074D9; text-decoration:none; }
-a:hover { text-decoration:underline; }
-.strong { font-weight: bold; }
-.space-top1 { padding: 10px 0 0 0; }
-.pad2y { padding: 20px 0; }
-.pad1y { padding: 10px 0; }
-.pad2x { padding: 0 20px; }
-.pad2 { padding: 20px; }
-.pad1 { padding: 10px; }
-.space-left2 { padding-left:55px; }
-.space-right2 { padding-right:20px; }
-.center { text-align:center; }
-.clearfix { display:block; }
-.clearfix:after {
- content:'';
- display:block;
- height:0;
- clear:both;
- visibility:hidden;
- }
-.fl { float: left; }
-@media only screen and (max-width:640px) {
- .col3 { width:100%; max-width:100%; }
- .hide-mobile { display:none!important; }
-}
-
-.quiet {
- color: #7f7f7f;
- color: rgba(0,0,0,0.5);
-}
-.quiet a { opacity: 0.7; }
-
-.fraction {
- font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
- font-size: 10px;
- color: #555;
- background: #E8E8E8;
- padding: 4px 5px;
- border-radius: 3px;
- vertical-align: middle;
-}
-
-div.path a:link, div.path a:visited { color: #333; }
-table.coverage {
- border-collapse: collapse;
- margin: 10px 0 0 0;
- padding: 0;
-}
-
-table.coverage td {
- margin: 0;
- padding: 0;
- vertical-align: top;
-}
-table.coverage td.line-count {
- text-align: right;
- padding: 0 5px 0 20px;
-}
-table.coverage td.line-coverage {
- text-align: right;
- padding-right: 10px;
- min-width:20px;
-}
-
-table.coverage td span.cline-any {
- display: inline-block;
- padding: 0 5px;
- width: 100%;
-}
-.missing-if-branch {
- display: inline-block;
- margin-right: 5px;
- border-radius: 3px;
- position: relative;
- padding: 0 4px;
- background: #333;
- color: yellow;
-}
-
-.skip-if-branch {
- display: none;
- margin-right: 10px;
- position: relative;
- padding: 0 4px;
- background: #ccc;
- color: white;
-}
-.missing-if-branch .typ, .skip-if-branch .typ {
- color: inherit !important;
-}
-.coverage-summary {
- border-collapse: collapse;
- width: 100%;
-}
-.coverage-summary tr { border-bottom: 1px solid #bbb; }
-.keyline-all { border: 1px solid #ddd; }
-.coverage-summary td, .coverage-summary th { padding: 10px; }
-.coverage-summary tbody { border: 1px solid #bbb; }
-.coverage-summary td { border-right: 1px solid #bbb; }
-.coverage-summary td:last-child { border-right: none; }
-.coverage-summary th {
- text-align: left;
- font-weight: normal;
- white-space: nowrap;
-}
-.coverage-summary th.file { border-right: none !important; }
-.coverage-summary th.pct { }
-.coverage-summary th.pic,
-.coverage-summary th.abs,
-.coverage-summary td.pct,
-.coverage-summary td.abs { text-align: right; }
-.coverage-summary td.file { white-space: nowrap; }
-.coverage-summary td.pic { min-width: 120px !important; }
-.coverage-summary tfoot td { }
-
-.coverage-summary .sorter {
- height: 10px;
- width: 7px;
- display: inline-block;
- margin-left: 0.5em;
- background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
-}
-.coverage-summary .sorted .sorter {
- background-position: 0 -20px;
-}
-.coverage-summary .sorted-desc .sorter {
- background-position: 0 -10px;
-}
-.status-line { height: 10px; }
-/* dark red */
-.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
-.low .chart { border:1px solid #C21F39 }
-/* medium red */
-.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
-/* light red */
-.low, .cline-no { background:#FCE1E5 }
-/* light green */
-.high, .cline-yes { background:rgb(230,245,208) }
-/* medium green */
-.cstat-yes { background:rgb(161,215,106) }
-/* dark green */
-.status-line.high, .high .cover-fill { background:rgb(77,146,33) }
-.high .chart { border:1px solid rgb(77,146,33) }
-/* dark yellow (gold) */
-.medium .chart { border:1px solid #f9cd0b; }
-.status-line.medium, .medium .cover-fill { background: #f9cd0b; }
-/* light yellow */
-.medium { background: #fff4c2; }
-/* light gray */
-span.cline-neutral { background: #eaeaea; }
-
-.cbranch-no { background: yellow !important; color: #111; }
-
-.cstat-skip { background: #ddd; color: #111; }
-.fstat-skip { background: #ddd; color: #111 !important; }
-.cbranch-skip { background: #ddd !important; color: #111; }
-
-
-.cover-fill, .cover-empty {
- display:inline-block;
- height: 12px;
-}
-.chart {
- line-height: 0;
-}
-.cover-empty {
- background: white;
-}
-.cover-full {
- border-right: none !important;
-}
-pre.prettyprint {
- border: none !important;
- padding: 0 !important;
- margin: 0 !important;
-}
-.com { color: #999 !important; }
-.ignore-none { color: #999; font-weight: normal; }
-
-.wrapper {
- min-height: 100%;
- height: auto !important;
- height: 100%;
- margin: 0 auto -48px;
-}
-.footer, .push {
- height: 48px;
-}
diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json
deleted file mode 100644
index 363de23..0000000
--- a/coverage/coverage-final.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-"contracts/governance/Operator.sol":{"l":{"29":208,"30":203,"37":2,"44":2,"55":59,"57":57,"58":2,"60":57,"62":57,"63":65,"64":65,"66":57},"path":"/home/node/project/contracts/governance/Operator.sol","s":{"1":208,"2":2,"3":2,"4":59,"5":57,"6":57,"7":57,"8":65,"9":65,"10":57},"b":{"1":[203,5],"2":[57,2]},"f":{"1":208,"2":2,"3":2,"4":59},"fnMap":{"1":{"name":"onlyOperator","line":28,"loc":{"start":{"line":28,"column":2},"end":{"line":28,"column":23}}},"2":{"name":"operatorCount","line":36,"loc":{"start":{"line":36,"column":2},"end":{"line":36,"column":56}}},"3":{"name":"operatorAddress","line":43,"loc":{"start":{"line":43,"column":2},"end":{"line":43,"column":75}}},"4":{"name":"defineOperators","line":53,"loc":{"start":{"line":53,"column":19},"end":{"line":54,"column":3}}}},"statementMap":{"1":{"start":{"line":29,"column":4},"end":{"line":29,"column":47}},"2":{"start":{"line":37,"column":4},"end":{"line":37,"column":27}},"3":{"start":{"line":44,"column":4},"end":{"line":44,"column":33}},"4":{"start":{"line":55,"column":4},"end":{"line":55,"column":54}},"5":{"start":{"line":57,"column":4},"end":{"line":57,"column":1305}},"6":{"start":{"line":60,"column":4},"end":{"line":60,"column":43}},"7":{"start":{"line":62,"column":4},"end":{"line":62,"column":1450}},"8":{"start":{"line":63,"column":6},"end":{"line":63,"column":52}},"9":{"start":{"line":64,"column":6},"end":{"line":64,"column":46}},"10":{"start":{"line":66,"column":4},"end":{"line":66,"column":25}}},"branchMap":{"1":{"line":29,"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":4}},{"start":{"line":29,"column":4},"end":{"line":29,"column":4}}]},"2":{"line":55,"type":"if","locations":[{"start":{"line":55,"column":4},"end":{"line":55,"column":4}},{"start":{"line":55,"column":4},"end":{"line":55,"column":4}}]}}},
-"contracts/governance/Ownable.sol":{"l":{"24":61,"31":61,"32":59,"39":0,"40":0,"48":0,"56":0,"57":0,"58":0},"path":"/home/node/project/contracts/governance/Ownable.sol","s":{"1":61,"2":61,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"b":{"1":[59,2],"2":[0,0]},"f":{"1":61,"2":61,"3":0,"4":0,"5":0},"fnMap":{"1":{"name":"constructor","line":23,"loc":{"start":{"line":23,"column":2},"end":{"line":23,"column":22}}},"2":{"name":"onlyOwner","line":30,"loc":{"start":{"line":30,"column":2},"end":{"line":30,"column":22}}},"3":{"name":"renounceOwnership","line":38,"loc":{"start":{"line":38,"column":46},"end":{"line":38,"column":3}}},"4":{"name":"transferOwnership","line":47,"loc":{"start":{"line":47,"column":63},"end":{"line":47,"column":3}}},"5":{"name":"_transferOwnership","line":55,"loc":{"start":{"line":55,"column":2},"end":{"line":55,"column":57}}}},"statementMap":{"1":{"start":{"line":24,"column":4},"end":{"line":24,"column":21}},"2":{"start":{"line":31,"column":4},"end":{"line":31,"column":31}},"3":{"start":{"line":39,"column":4},"end":{"line":39,"column":34}},"4":{"start":{"line":40,"column":4},"end":{"line":40,"column":21}},"5":{"start":{"line":48,"column":4},"end":{"line":48,"column":32}},"6":{"start":{"line":56,"column":4},"end":{"line":56,"column":35}},"7":{"start":{"line":57,"column":4},"end":{"line":57,"column":47}},"8":{"start":{"line":58,"column":4},"end":{"line":58,"column":20}}},"branchMap":{"1":{"line":31,"type":"if","locations":[{"start":{"line":31,"column":4},"end":{"line":31,"column":4}},{"start":{"line":31,"column":4},"end":{"line":31,"column":4}}]},"2":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":4},"end":{"line":56,"column":4}},{"start":{"line":56,"column":4},"end":{"line":56,"column":4}}]}}},
-"contracts/interface/IERC20.sol":{"l":{},"path":"/home/node/project/contracts/interface/IERC20.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},
-"contracts/interface/IRouter.sol":{"l":{},"path":"/home/node/project/contracts/interface/IRouter.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},
-"contracts/interface/IUserRegistry.sol":{"l":{},"path":"/home/node/project/contracts/interface/IUserRegistry.sol","s":{},"b":{},"f":{},"fnMap":{},"statementMap":{},"branchMap":{}},
-"contracts/math/SafeMath.sol":{"l":{"17":0,"18":0,"21":0,"22":0,"23":0,"33":0,"40":9,"41":9,"48":7,"49":7,"50":7},"path":"/home/node/project/contracts/math/SafeMath.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":9,"8":9,"9":7,"10":7,"11":7},"b":{"1":[0,0],"2":[0,0],"3":[9,0],"4":[7,0]},"f":{"1":0,"2":0,"3":9,"4":7},"fnMap":{"1":{"name":"mul","line":13,"loc":{"start":{"line":13,"column":2},"end":{"line":13,"column":70}}},"2":{"name":"div","line":29,"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":68}}},"3":{"name":"sub","line":39,"loc":{"start":{"line":39,"column":2},"end":{"line":39,"column":68}}},"4":{"name":"add","line":47,"loc":{"start":{"line":47,"column":2},"end":{"line":47,"column":70}}}},"statementMap":{"1":{"start":{"line":17,"column":4},"end":{"line":17,"column":495}},"2":{"start":{"line":18,"column":6},"end":{"line":18,"column":14}},"3":{"start":{"line":21,"column":4},"end":{"line":21,"column":12}},"4":{"start":{"line":22,"column":4},"end":{"line":22,"column":21}},"5":{"start":{"line":23,"column":4},"end":{"line":23,"column":12}},"6":{"start":{"line":33,"column":4},"end":{"line":33,"column":16}},"7":{"start":{"line":40,"column":4},"end":{"line":40,"column":17}},"8":{"start":{"line":41,"column":4},"end":{"line":41,"column":16}},"9":{"start":{"line":48,"column":4},"end":{"line":48,"column":12}},"10":{"start":{"line":49,"column":4},"end":{"line":49,"column":17}},"11":{"start":{"line":50,"column":4},"end":{"line":50,"column":12}}},"branchMap":{"1":{"line":17,"type":"if","locations":[{"start":{"line":17,"column":4},"end":{"line":17,"column":4}},{"start":{"line":17,"column":4},"end":{"line":17,"column":4}}]},"2":{"line":22,"type":"if","locations":[{"start":{"line":22,"column":4},"end":{"line":22,"column":4}},{"start":{"line":22,"column":4},"end":{"line":22,"column":4}}]},"3":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":4},"end":{"line":40,"column":4}},{"start":{"line":40,"column":4},"end":{"line":40,"column":4}}]},"4":{"line":49,"type":"if","locations":[{"start":{"line":49,"column":4},"end":{"line":49,"column":4}},{"start":{"line":49,"column":4},"end":{"line":49,"column":4}}]}}},
-"contracts/registry/UserRegistry.sol":{"l":{"41":49,"42":112,"50":4,"57":10,"64":3,"65":3,"66":3,"68":0,"75":7,"82":15,"91":4,"98":4,"105":3,"114":3,"123":1,"124":2,"134":86,"135":82,"136":78,"138":78,"147":30,"148":28,"149":54,"159":3,"168":1,"169":3,"177":3,"184":3,"185":3,"186":1,"193":14,"194":10,"195":8,"202":9,"203":5,"204":3,"213":5,"214":8,"224":3,"225":4,"237":33,"238":29,"239":29,"250":3,"251":4,"261":7,"262":3,"273":3,"274":4,"284":117,"285":115,"286":115,"288":115,"289":115,"296":10,"297":10,"298":6,"299":6,"307":10},"path":"/home/node/project/contracts/registry/UserRegistry.sol","s":{"1":49,"2":112,"3":4,"4":10,"5":3,"6":3,"7":3,"8":0,"9":7,"10":15,"11":4,"12":4,"13":3,"14":3,"15":1,"16":2,"17":86,"18":82,"19":78,"20":78,"21":30,"22":28,"23":54,"24":3,"25":1,"26":3,"27":3,"28":3,"29":3,"30":1,"31":14,"32":10,"33":8,"34":9,"35":5,"36":3,"37":5,"38":8,"39":3,"40":4,"41":33,"42":29,"43":29,"44":3,"45":4,"46":7,"47":3,"48":3,"49":4,"50":117,"51":115,"52":115,"53":115,"54":115,"55":10,"56":10,"57":6,"58":10},"b":{"1":[3,0],"2":[82,4],"3":[78,4],"4":[28,2],"5":[1,2],"6":[10,4],"7":[8,2],"8":[5,4],"9":[3,2],"10":[29,4],"11":[3,4],"12":[115,2],"13":[6,4]},"f":{"1":49,"2":4,"3":10,"4":3,"5":7,"6":15,"7":4,"8":4,"9":3,"10":3,"11":1,"12":86,"13":30,"14":3,"15":1,"16":3,"17":3,"18":14,"19":9,"20":5,"21":3,"22":33,"23":3,"24":7,"25":3,"26":117,"27":10,"28":10},"fnMap":{"1":{"name":"constructor","line":40,"loc":{"start":{"line":40,"column":2},"end":{"line":40,"column":74}}},"2":{"name":"userCount","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":49,"column":61}}},"3":{"name":"userId","line":56,"loc":{"start":{"line":56,"column":2},"end":{"line":56,"column":74}}},"4":{"name":"validUserId","line":63,"loc":{"start":{"line":63,"column":2},"end":{"line":63,"column":79}}},"5":{"name":"validUntilTime","line":74,"loc":{"start":{"line":74,"column":2},"end":{"line":74,"column":81}}},"6":{"name":"suspended","line":81,"loc":{"start":{"line":81,"column":2},"end":{"line":81,"column":73}}},"7":{"name":"extended","line":88,"loc":{"start":{"line":88,"column":2},"end":{"line":90,"column":3}}},"8":{"name":"isAddressValid","line":97,"loc":{"start":{"line":97,"column":2},"end":{"line":97,"column":79}}},"9":{"name":"isValid","line":104,"loc":{"start":{"line":104,"column":2},"end":{"line":104,"column":71}}},"10":{"name":"registerUser","line":112,"loc":{"start":{"line":112,"column":31},"end":{"line":113,"column":3}}},"11":{"name":"registerManyUsers","line":121,"loc":{"start":{"line":121,"column":31},"end":{"line":122,"column":3}}},"12":{"name":"attachAddress","line":132,"loc":{"start":{"line":132,"column":31},"end":{"line":133,"column":3}}},"13":{"name":"attachManyAddresses","line":145,"loc":{"start":{"line":145,"column":31},"end":{"line":146,"column":3}}},"14":{"name":"detachAddress","line":157,"loc":{"start":{"line":157,"column":31},"end":{"line":158,"column":3}}},"15":{"name":"detachManyAddresses","line":166,"loc":{"start":{"line":166,"column":31},"end":{"line":167,"column":3}}},"16":{"name":"detachSelf","line":176,"loc":{"start":{"line":176,"column":2},"end":{"line":176,"column":39}}},"17":{"name":"detachSelfAddress","line":183,"loc":{"start":{"line":183,"column":2},"end":{"line":183,"column":62}}},"18":{"name":"suspendUser","line":192,"loc":{"start":{"line":192,"column":67},"end":{"line":192,"column":3}}},"19":{"name":"unsuspendUser","line":201,"loc":{"start":{"line":201,"column":69},"end":{"line":201,"column":3}}},"20":{"name":"suspendManyUsers","line":211,"loc":{"start":{"line":211,"column":31},"end":{"line":212,"column":3}}},"21":{"name":"unsuspendManyUsers","line":222,"loc":{"start":{"line":222,"column":31},"end":{"line":223,"column":3}}},"22":{"name":"updateUser","line":235,"loc":{"start":{"line":235,"column":48},"end":{"line":236,"column":3}}},"23":{"name":"updateManyUsers","line":248,"loc":{"start":{"line":248,"column":48},"end":{"line":249,"column":3}}},"24":{"name":"updateUserExtended","line":259,"loc":{"start":{"line":259,"column":31},"end":{"line":260,"column":3}}},"25":{"name":"updateManyUsersExtended","line":271,"loc":{"start":{"line":271,"column":47},"end":{"line":272,"column":3}}},"26":{"name":"registerUserInternal","line":281,"loc":{"start":{"line":281,"column":2},"end":{"line":283,"column":3}}},"27":{"name":"detachAddressInternal","line":295,"loc":{"start":{"line":295,"column":2},"end":{"line":295,"column":59}}},"28":{"name":"isValidInternal","line":305,"loc":{"start":{"line":305,"column":2},"end":{"line":305,"column":74}}}},"statementMap":{"1":{"start":{"line":41,"column":4},"end":{"line":41,"column":1016}},"2":{"start":{"line":42,"column":6},"end":{"line":42,"column":57}},"3":{"start":{"line":50,"column":4},"end":{"line":50,"column":21}},"4":{"start":{"line":57,"column":4},"end":{"line":57,"column":33}},"5":{"start":{"line":64,"column":4},"end":{"line":64,"column":50}},"6":{"start":{"line":65,"column":4},"end":{"line":65,"column":1689}},"7":{"start":{"line":66,"column":6},"end":{"line":66,"column":26}},"8":{"start":{"line":68,"column":4},"end":{"line":68,"column":12}},"9":{"start":{"line":75,"column":4},"end":{"line":75,"column":40}},"10":{"start":{"line":82,"column":4},"end":{"line":82,"column":35}},"11":{"start":{"line":91,"column":4},"end":{"line":91,"column":40}},"12":{"start":{"line":98,"column":4},"end":{"line":98,"column":57}},"13":{"start":{"line":105,"column":4},"end":{"line":105,"column":42}},"14":{"start":{"line":114,"column":4},"end":{"line":114,"column":50}},"15":{"start":{"line":123,"column":4},"end":{"line":123,"column":3080}},"16":{"start":{"line":124,"column":6},"end":{"line":124,"column":57}},"17":{"start":{"line":134,"column":4},"end":{"line":134,"column":56}},"18":{"start":{"line":135,"column":4},"end":{"line":135,"column":47}},"19":{"start":{"line":136,"column":4},"end":{"line":136,"column":35}},"20":{"start":{"line":138,"column":4},"end":{"line":138,"column":43}},"21":{"start":{"line":147,"column":4},"end":{"line":147,"column":56}},"22":{"start":{"line":148,"column":4},"end":{"line":148,"column":3793}},"23":{"start":{"line":149,"column":6},"end":{"line":149,"column":46}},"24":{"start":{"line":159,"column":4},"end":{"line":159,"column":34}},"25":{"start":{"line":168,"column":4},"end":{"line":168,"column":4304}},"26":{"start":{"line":169,"column":6},"end":{"line":169,"column":41}},"27":{"start":{"line":177,"column":4},"end":{"line":177,"column":36}},"28":{"start":{"line":184,"column":4},"end":{"line":184,"column":51}},"29":{"start":{"line":185,"column":4},"end":{"line":185,"column":58}},"30":{"start":{"line":186,"column":4},"end":{"line":186,"column":34}},"31":{"start":{"line":193,"column":4},"end":{"line":193,"column":56}},"32":{"start":{"line":194,"column":4},"end":{"line":194,"column":45}},"33":{"start":{"line":195,"column":4},"end":{"line":195,"column":34}},"34":{"start":{"line":202,"column":4},"end":{"line":202,"column":56}},"35":{"start":{"line":203,"column":4},"end":{"line":203,"column":44}},"36":{"start":{"line":204,"column":4},"end":{"line":204,"column":35}},"37":{"start":{"line":213,"column":4},"end":{"line":213,"column":5525}},"38":{"start":{"line":214,"column":6},"end":{"line":214,"column":29}},"39":{"start":{"line":224,"column":4},"end":{"line":224,"column":5757}},"40":{"start":{"line":225,"column":6},"end":{"line":225,"column":31}},"41":{"start":{"line":237,"column":4},"end":{"line":237,"column":56}},"42":{"start":{"line":238,"column":4},"end":{"line":238,"column":50}},"43":{"start":{"line":239,"column":4},"end":{"line":239,"column":40}},"44":{"start":{"line":250,"column":4},"end":{"line":250,"column":6359}},"45":{"start":{"line":251,"column":6},"end":{"line":251,"column":57}},"46":{"start":{"line":261,"column":4},"end":{"line":261,"column":56}},"47":{"start":{"line":262,"column":4},"end":{"line":262,"column":41}},"48":{"start":{"line":273,"column":4},"end":{"line":273,"column":6958}},"49":{"start":{"line":274,"column":6},"end":{"line":274,"column":50}},"50":{"start":{"line":284,"column":4},"end":{"line":284,"column":47}},"51":{"start":{"line":285,"column":4},"end":{"line":285,"column":53}},"52":{"start":{"line":286,"column":4},"end":{"line":286,"column":38}},"53":{"start":{"line":288,"column":4},"end":{"line":288,"column":35}},"54":{"start":{"line":289,"column":4},"end":{"line":289,"column":46}},"55":{"start":{"line":296,"column":4},"end":{"line":296,"column":50}},"56":{"start":{"line":297,"column":4},"end":{"line":297,"column":38}},"57":{"start":{"line":298,"column":4},"end":{"line":298,"column":49}},"58":{"start":{"line":307,"column":4},"end":{"line":307,"column":55}}},"branchMap":{"1":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":4},"end":{"line":65,"column":4}},{"start":{"line":65,"column":4},"end":{"line":65,"column":4}}]},"2":{"line":134,"type":"if","locations":[{"start":{"line":134,"column":4},"end":{"line":134,"column":4}},{"start":{"line":134,"column":4},"end":{"line":134,"column":4}}]},"3":{"line":135,"type":"if","locations":[{"start":{"line":135,"column":4},"end":{"line":135,"column":4}},{"start":{"line":135,"column":4},"end":{"line":135,"column":4}}]},"4":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":4},"end":{"line":147,"column":4}},{"start":{"line":147,"column":4},"end":{"line":147,"column":4}}]},"5":{"line":185,"type":"if","locations":[{"start":{"line":185,"column":4},"end":{"line":185,"column":4}},{"start":{"line":185,"column":4},"end":{"line":185,"column":4}}]},"6":{"line":193,"type":"if","locations":[{"start":{"line":193,"column":4},"end":{"line":193,"column":4}},{"start":{"line":193,"column":4},"end":{"line":193,"column":4}}]},"7":{"line":194,"type":"if","locations":[{"start":{"line":194,"column":4},"end":{"line":194,"column":4}},{"start":{"line":194,"column":4},"end":{"line":194,"column":4}}]},"8":{"line":202,"type":"if","locations":[{"start":{"line":202,"column":4},"end":{"line":202,"column":4}},{"start":{"line":202,"column":4},"end":{"line":202,"column":4}}]},"9":{"line":203,"type":"if","locations":[{"start":{"line":203,"column":4},"end":{"line":203,"column":4}},{"start":{"line":203,"column":4},"end":{"line":203,"column":4}}]},"10":{"line":237,"type":"if","locations":[{"start":{"line":237,"column":4},"end":{"line":237,"column":4}},{"start":{"line":237,"column":4},"end":{"line":237,"column":4}}]},"11":{"line":261,"type":"if","locations":[{"start":{"line":261,"column":4},"end":{"line":261,"column":4}},{"start":{"line":261,"column":4},"end":{"line":261,"column":4}}]},"12":{"line":284,"type":"if","locations":[{"start":{"line":284,"column":4},"end":{"line":284,"column":4}},{"start":{"line":284,"column":4},"end":{"line":284,"column":4}}]},"13":{"line":297,"type":"if","locations":[{"start":{"line":297,"column":4},"end":{"line":297,"column":4}},{"start":{"line":297,"column":4},"end":{"line":297,"column":4}}]}}},
-"contracts/routing/BasicRouter.sol":{"l":{"34":0,"35":0,"39":0,"43":0,"47":0,"51":0,"55":0,"59":0,"66":0,"67":0,"77":0,"78":0,"79":0,"85":0,"86":0,"88":0,"95":0,"96":0,"105":0,"106":0,"107":0,"109":0,"111":0,"112":0,"113":0,"114":0,"115":0,"117":0,"120":0},"path":"/home/node/project/contracts/routing/BasicRouter.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0},"fnMap":{"1":{"name":"configNotLocked","line":33,"loc":{"start":{"line":33,"column":2},"end":{"line":33,"column":28}}},"2":{"name":null,"line":38,"loc":{"start":{"line":38,"column":2},"end":{"line":38,"column":37}}},"3":{"name":null,"line":42,"loc":{"start":{"line":42,"column":2},"end":{"line":42,"column":38}}},"4":{"name":"destinations","line":46,"loc":{"start":{"line":46,"column":2},"end":{"line":46,"column":88}}},"5":{"name":"activeDestination","line":50,"loc":{"start":{"line":50,"column":2},"end":{"line":50,"column":75}}},"6":{"name":"destinationAbi","line":54,"loc":{"start":{"line":54,"column":2},"end":{"line":54,"column":80}}},"7":{"name":"isConfigLocked","line":58,"loc":{"start":{"line":58,"column":2},"end":{"line":58,"column":63}}},"8":{"name":"findDestination","line":65,"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":81}}},"9":{"name":"setRoute","line":75,"loc":{"start":{"line":75,"column":44},"end":{"line":76,"column":3}}},"10":{"name":"switchDestination","line":83,"loc":{"start":{"line":83,"column":19},"end":{"line":84,"column":3}}},"11":{"name":"lockConfig","line":94,"loc":{"start":{"line":94,"column":64},"end":{"line":94,"column":3}}},"12":{"name":"callPayable","line":103,"loc":{"start":{"line":103,"column":2},"end":{"line":104,"column":3}}}},"statementMap":{"1":{"start":{"line":34,"column":4},"end":{"line":34,"column":34}},"2":{"start":{"line":39,"column":4},"end":{"line":39,"column":47}},"3":{"start":{"line":43,"column":4},"end":{"line":43,"column":47}},"4":{"start":{"line":47,"column":4},"end":{"line":47,"column":39}},"5":{"start":{"line":51,"column":4},"end":{"line":51,"column":44}},"6":{"start":{"line":55,"column":4},"end":{"line":55,"column":41}},"7":{"start":{"line":59,"column":4},"end":{"line":59,"column":24}},"8":{"start":{"line":66,"column":4},"end":{"line":66,"column":40}},"9":{"start":{"line":67,"column":4},"end":{"line":67,"column":1721}},"10":{"start":{"line":77,"column":4},"end":{"line":77,"column":61}},"11":{"start":{"line":78,"column":4},"end":{"line":78,"column":62}},"12":{"start":{"line":79,"column":4},"end":{"line":79,"column":15}},"13":{"start":{"line":85,"column":4},"end":{"line":85,"column":76}},"14":{"start":{"line":86,"column":4},"end":{"line":86,"column":57}},"15":{"start":{"line":88,"column":4},"end":{"line":88,"column":57}},"16":{"start":{"line":95,"column":4},"end":{"line":95,"column":23}},"17":{"start":{"line":96,"column":4},"end":{"line":96,"column":23}},"18":{"start":{"line":105,"column":4},"end":{"line":105,"column":33}},"19":{"start":{"line":106,"column":4},"end":{"line":106,"column":50}},"20":{"start":{"line":107,"column":4},"end":{"line":107,"column":45}},"21":{"start":{"line":109,"column":4},"end":{"line":109,"column":59}},"22":{"start":{"line":111,"column":4},"end":{"line":111,"column":16}},"23":{"start":{"line":112,"column":4},"end":{"line":112,"column":23}},"24":{"start":{"line":113,"column":4},"end":{"line":113,"column":3080}},"25":{"start":{"line":114,"column":6},"end":{"line":114,"column":77}},"26":{"start":{"line":115,"column":6},"end":{"line":115,"column":69}},"27":{"start":{"line":117,"column":6},"end":{"line":117,"column":63}},"28":{"start":{"line":120,"column":4},"end":{"line":120,"column":27}}},"branchMap":{"1":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":34,"column":4}},{"start":{"line":34,"column":4},"end":{"line":34,"column":4}}]},"2":{"line":85,"type":"if","locations":[{"start":{"line":85,"column":4},"end":{"line":85,"column":4}},{"start":{"line":85,"column":4},"end":{"line":85,"column":4}}]},"3":{"line":105,"type":"if","locations":[{"start":{"line":105,"column":4},"end":{"line":105,"column":4}},{"start":{"line":105,"column":4},"end":{"line":105,"column":4}}]},"4":{"line":107,"type":"if","locations":[{"start":{"line":107,"column":4},"end":{"line":107,"column":4}},{"start":{"line":107,"column":4},"end":{"line":107,"column":4}}]},"5":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":4},"end":{"line":113,"column":4}},{"start":{"line":113,"column":4},"end":{"line":113,"column":4}}]},"6":{"line":120,"type":"if","locations":[{"start":{"line":120,"column":4},"end":{"line":120,"column":4}},{"start":{"line":120,"column":4},"end":{"line":120,"column":4}}]}}},
-"contracts/routing/DynamicRouter.sol":{"l":{"29":0,"33":0,"37":0,"38":0,"40":0,"41":0,"42":0,"43":0,"45":0,"46":0,"47":0,"50":0,"51":0,"53":0,"54":0,"55":0,"56":0,"61":0,"69":0,"72":0,"73":0,"75":0},"path":"/home/node/project/contracts/routing/DynamicRouter.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0},"fnMap":{"1":{"name":"maxBalances","line":28,"loc":{"start":{"line":28,"column":2},"end":{"line":28,"column":78}}},"2":{"name":"weights","line":32,"loc":{"start":{"line":32,"column":2},"end":{"line":32,"column":74}}},"3":{"name":"findDestination","line":36,"loc":{"start":{"line":36,"column":2},"end":{"line":36,"column":82}}},"4":{"name":"setDistribution","line":68,"loc":{"start":{"line":68,"column":35},"end":{"line":68,"column":18}}}},"statementMap":{"1":{"start":{"line":29,"column":4},"end":{"line":29,"column":45}},"2":{"start":{"line":33,"column":4},"end":{"line":33,"column":41}},"3":{"start":{"line":37,"column":4},"end":{"line":37,"column":61}},"4":{"start":{"line":38,"column":4},"end":{"line":38,"column":40}},"5":{"start":{"line":40,"column":4},"end":{"line":40,"column":44}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":44}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":1156}},"8":{"start":{"line":43,"column":6},"end":{"line":43,"column":49}},"9":{"start":{"line":45,"column":6},"end":{"line":45,"column":1271}},"10":{"start":{"line":46,"column":8},"end":{"line":46,"column":40}},"11":{"start":{"line":50,"column":5},"end":{"line":50,"column":1375}},"12":{"start":{"line":51,"column":8},"end":{"line":51,"column":1503}},"13":{"start":{"line":53,"column":8},"end":{"line":53,"column":62}},"14":{"start":{"line":54,"column":8},"end":{"line":54,"column":1602}},"15":{"start":{"line":55,"column":10},"end":{"line":55,"column":45}},"16":{"start":{"line":56,"column":10},"end":{"line":56,"column":42}},"17":{"start":{"line":61,"column":4},"end":{"line":61,"column":30}},"18":{"start":{"line":69,"column":4},"end":{"line":69,"column":2040}},"19":{"start":{"line":72,"column":4},"end":{"line":72,"column":64}},"20":{"start":{"line":73,"column":4},"end":{"line":73,"column":52}},"21":{"start":{"line":75,"column":4},"end":{"line":75,"column":15}}},"branchMap":{"1":{"line":45,"type":"if","locations":[{"start":{"line":45,"column":6},"end":{"line":45,"column":6}},{"start":{"line":45,"column":6},"end":{"line":45,"column":6}}]},"2":{"line":50,"type":"if","locations":[{"start":{"line":50,"column":5},"end":{"line":50,"column":5}},{"start":{"line":50,"column":5},"end":{"line":50,"column":5}}]},"3":{"line":54,"type":"if","locations":[{"start":{"line":54,"column":8},"end":{"line":54,"column":8}},{"start":{"line":54,"column":8},"end":{"line":54,"column":8}}]},"4":{"line":69,"type":"if","locations":[{"start":{"line":69,"column":4},"end":{"line":69,"column":4}},{"start":{"line":69,"column":4},"end":{"line":69,"column":4}}]}}},
-"contracts/routing/ScheduledRouter.sol":{"l":{"28":0,"29":0,"33":0,"34":0,"35":0,"37":0,"42":0,"43":0,"44":0},"path":"/home/node/project/contracts/routing/ScheduledRouter.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0},"b":{"1":[0,0],"2":[0,0]},"f":{"1":0,"2":0,"3":0},"fnMap":{"1":{"name":"schedule","line":27,"loc":{"start":{"line":27,"column":2},"end":{"line":27,"column":75}}},"2":{"name":"findDestination","line":32,"loc":{"start":{"line":32,"column":2},"end":{"line":32,"column":90}}},"3":{"name":"setRouteSchedule","line":41,"loc":{"start":{"line":41,"column":35},"end":{"line":41,"column":18}}}},"statementMap":{"1":{"start":{"line":28,"column":4},"end":{"line":28,"column":50}},"2":{"start":{"line":29,"column":4},"end":{"line":29,"column":47}},"3":{"start":{"line":33,"column":4},"end":{"line":33,"column":50}},"4":{"start":{"line":34,"column":4},"end":{"line":34,"column":818}},"5":{"start":{"line":35,"column":6},"end":{"line":35,"column":23}},"6":{"start":{"line":37,"column":4},"end":{"line":37,"column":41}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":55}},"8":{"start":{"line":43,"column":4},"end":{"line":43,"column":50}},"9":{"start":{"line":44,"column":4},"end":{"line":44,"column":36}}},"branchMap":{"1":{"line":34,"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":34,"column":4}},{"start":{"line":34,"column":4},"end":{"line":34,"column":4}}]},"2":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":42,"column":4}},{"start":{"line":42,"column":4},"end":{"line":42,"column":4}}]}}},
-"contracts/token/DummyToken.sol":{"l":{"35":0,"36":0,"37":0,"38":0,"39":0,"41":0,"42":0,"46":0,"50":0,"54":0,"58":0,"62":0,"66":0,"70":0,"74":0,"78":0,"84":0,"88":0,"89":0,"91":0,"92":0,"93":0,"94":0,"100":0,"101":0,"102":0,"104":0,"105":0,"106":0,"107":0,"108":0,"112":0,"113":0,"114":0,"120":0,"122":0,"123":0,"129":0,"130":0,"131":0,"133":0,"135":0,"136":0,"140":0,"141":0,"142":0,"146":0,"150":0,"154":0,"155":0,"159":0,"163":0,"167":0,"168":0,"170":0,"171":0,"172":0,"176":0,"177":0},"path":"/home/node/project/contracts/token/DummyToken.sol","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0},"fnMap":{"1":{"name":"constructor","line":29,"loc":{"start":{"line":29,"column":2},"end":{"line":34,"column":3}}},"2":{"name":"name","line":45,"loc":{"start":{"line":45,"column":2},"end":{"line":45,"column":62}}},"3":{"name":"symbol","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":49,"column":64}}},"4":{"name":"decimal","line":53,"loc":{"start":{"line":53,"column":2},"end":{"line":53,"column":59}}},"5":{"name":"totalSupply","line":57,"loc":{"start":{"line":57,"column":2},"end":{"line":57,"column":63}}},"6":{"name":"balanceOf","line":61,"loc":{"start":{"line":61,"column":2},"end":{"line":61,"column":75}}},"7":{"name":"rate","line":65,"loc":{"start":{"line":65,"column":2},"end":{"line":65,"column":47}}},"8":{"name":"rateAt","line":69,"loc":{"start":{"line":69,"column":2},"end":{"line":69,"column":49}}},"9":{"name":"interest","line":73,"loc":{"start":{"line":73,"column":2},"end":{"line":73,"column":51}}},"10":{"name":"twin","line":77,"loc":{"start":{"line":77,"column":2},"end":{"line":77,"column":46}}},"11":{"name":"allowance","line":81,"loc":{"start":{"line":81,"column":2},"end":{"line":83,"column":3}}},"12":{"name":"transfer","line":87,"loc":{"start":{"line":87,"column":2},"end":{"line":87,"column":79}}},"13":{"name":"transferFrom","line":97,"loc":{"start":{"line":97,"column":2},"end":{"line":99,"column":3}}},"14":{"name":"approve","line":111,"loc":{"start":{"line":111,"column":2},"end":{"line":111,"column":83}}},"15":{"name":"increaseApproval","line":117,"loc":{"start":{"line":117,"column":2},"end":{"line":119,"column":3}}},"16":{"name":"decreaseApproval","line":126,"loc":{"start":{"line":126,"column":2},"end":{"line":128,"column":3}}},"17":{"name":"updateToken","line":139,"loc":{"start":{"line":139,"column":2},"end":{"line":139,"column":91}}},"18":{"name":"updateSupply","line":145,"loc":{"start":{"line":145,"column":2},"end":{"line":145,"column":52}}},"19":{"name":"updateBalance","line":149,"loc":{"start":{"line":149,"column":2},"end":{"line":149,"column":65}}},"20":{"name":"updateRate","line":153,"loc":{"start":{"line":153,"column":2},"end":{"line":153,"column":43}}},"21":{"name":"updateTwin","line":158,"loc":{"start":{"line":158,"column":2},"end":{"line":158,"column":42}}},"22":{"name":"createTwin","line":162,"loc":{"start":{"line":162,"column":2},"end":{"line":162,"column":30}}},"23":{"name":"transferNoEvent","line":166,"loc":{"start":{"line":166,"column":2},"end":{"line":166,"column":77}}},"24":{"name":"transferTwin","line":175,"loc":{"start":{"line":175,"column":2},"end":{"line":175,"column":74}}}},"statementMap":{"1":{"start":{"line":35,"column":4},"end":{"line":35,"column":16}},"2":{"start":{"line":36,"column":4},"end":{"line":36,"column":20}},"3":{"start":{"line":37,"column":4},"end":{"line":37,"column":22}},"4":{"start":{"line":38,"column":4},"end":{"line":38,"column":30}},"5":{"start":{"line":39,"column":4},"end":{"line":39,"column":38}},"6":{"start":{"line":41,"column":4},"end":{"line":41,"column":12}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":16}},"8":{"start":{"line":46,"column":4},"end":{"line":46,"column":16}},"9":{"start":{"line":50,"column":4},"end":{"line":50,"column":18}},"10":{"start":{"line":54,"column":4},"end":{"line":54,"column":19}},"11":{"start":{"line":58,"column":4},"end":{"line":58,"column":48}},"12":{"start":{"line":62,"column":4},"end":{"line":62,"column":52}},"13":{"start":{"line":66,"column":4},"end":{"line":66,"column":16}},"14":{"start":{"line":70,"column":4},"end":{"line":70,"column":18}},"15":{"start":{"line":74,"column":4},"end":{"line":74,"column":43}},"16":{"start":{"line":78,"column":4},"end":{"line":78,"column":16}},"17":{"start":{"line":84,"column":4},"end":{"line":84,"column":36}},"18":{"start":{"line":88,"column":4},"end":{"line":88,"column":29}},"19":{"start":{"line":89,"column":4},"end":{"line":89,"column":42}},"20":{"start":{"line":91,"column":4},"end":{"line":91,"column":58}},"21":{"start":{"line":92,"column":4},"end":{"line":92,"column":44}},"22":{"start":{"line":93,"column":4},"end":{"line":93,"column":42}},"23":{"start":{"line":94,"column":4},"end":{"line":94,"column":15}},"24":{"start":{"line":100,"column":4},"end":{"line":100,"column":29}},"25":{"start":{"line":101,"column":4},"end":{"line":101,"column":37}},"26":{"start":{"line":102,"column":4},"end":{"line":102,"column":48}},"27":{"start":{"line":104,"column":4},"end":{"line":104,"column":48}},"28":{"start":{"line":105,"column":4},"end":{"line":105,"column":44}},"29":{"start":{"line":106,"column":4},"end":{"line":106,"column":70}},"30":{"start":{"line":107,"column":4},"end":{"line":107,"column":37}},"31":{"start":{"line":108,"column":4},"end":{"line":108,"column":15}},"32":{"start":{"line":112,"column":4},"end":{"line":112,"column":41}},"33":{"start":{"line":113,"column":4},"end":{"line":113,"column":47}},"34":{"start":{"line":114,"column":4},"end":{"line":114,"column":15}},"35":{"start":{"line":120,"column":4},"end":{"line":120,"column":3026}},"36":{"start":{"line":122,"column":4},"end":{"line":122,"column":70}},"37":{"start":{"line":123,"column":4},"end":{"line":123,"column":15}},"38":{"start":{"line":129,"column":4},"end":{"line":129,"column":49}},"39":{"start":{"line":130,"column":4},"end":{"line":130,"column":3324}},"40":{"start":{"line":131,"column":6},"end":{"line":131,"column":38}},"41":{"start":{"line":133,"column":6},"end":{"line":133,"column":67}},"42":{"start":{"line":135,"column":4},"end":{"line":135,"column":70}},"43":{"start":{"line":136,"column":4},"end":{"line":136,"column":15}},"44":{"start":{"line":140,"column":4},"end":{"line":140,"column":16}},"45":{"start":{"line":141,"column":4},"end":{"line":141,"column":20}},"46":{"start":{"line":142,"column":4},"end":{"line":142,"column":22}},"47":{"start":{"line":146,"column":4},"end":{"line":146,"column":30}},"48":{"start":{"line":150,"column":4},"end":{"line":150,"column":30}},"49":{"start":{"line":154,"column":4},"end":{"line":154,"column":16}},"50":{"start":{"line":155,"column":4},"end":{"line":155,"column":16}},"51":{"start":{"line":159,"column":4},"end":{"line":159,"column":16}},"52":{"start":{"line":163,"column":4},"end":{"line":163,"column":65}},"53":{"start":{"line":167,"column":4},"end":{"line":167,"column":29}},"54":{"start":{"line":168,"column":4},"end":{"line":168,"column":42}},"55":{"start":{"line":170,"column":4},"end":{"line":170,"column":58}},"56":{"start":{"line":171,"column":4},"end":{"line":171,"column":44}},"57":{"start":{"line":172,"column":4},"end":{"line":172,"column":15}},"58":{"start":{"line":176,"column":4},"end":{"line":176,"column":40}},"59":{"start":{"line":177,"column":4},"end":{"line":177,"column":38}}},"branchMap":{"1":{"line":88,"type":"if","locations":[{"start":{"line":88,"column":4},"end":{"line":88,"column":4}},{"start":{"line":88,"column":4},"end":{"line":88,"column":4}}]},"2":{"line":89,"type":"if","locations":[{"start":{"line":89,"column":4},"end":{"line":89,"column":4}},{"start":{"line":89,"column":4},"end":{"line":89,"column":4}}]},"3":{"line":100,"type":"if","locations":[{"start":{"line":100,"column":4},"end":{"line":100,"column":4}},{"start":{"line":100,"column":4},"end":{"line":100,"column":4}}]},"4":{"line":101,"type":"if","locations":[{"start":{"line":101,"column":4},"end":{"line":101,"column":4}},{"start":{"line":101,"column":4},"end":{"line":101,"column":4}}]},"5":{"line":102,"type":"if","locations":[{"start":{"line":102,"column":4},"end":{"line":102,"column":4}},{"start":{"line":102,"column":4},"end":{"line":102,"column":4}}]},"6":{"line":130,"type":"if","locations":[{"start":{"line":130,"column":4},"end":{"line":130,"column":4}},{"start":{"line":130,"column":4},"end":{"line":130,"column":4}}]},"7":{"line":167,"type":"if","locations":[{"start":{"line":167,"column":4},"end":{"line":167,"column":4}},{"start":{"line":167,"column":4},"end":{"line":167,"column":4}}]},"8":{"line":168,"type":"if","locations":[{"start":{"line":168,"column":4},"end":{"line":168,"column":4}},{"start":{"line":168,"column":4},"end":{"line":168,"column":4}}]},"9":{"line":176,"type":"if","locations":[{"start":{"line":176,"column":4},"end":{"line":176,"column":4}},{"start":{"line":176,"column":4},"end":{"line":176,"column":4}}]}}},
-"contracts/token/ERC20Token.sol":{"l":{"30":17,"31":17,"32":17,"33":17,"34":17,"38":1,"42":1,"46":1,"50":2,"54":4,"60":1,"65":5,"66":5,"68":5,"69":5,"70":5,"71":5,"77":3,"78":3,"79":3,"81":1,"82":1,"83":1,"84":1,"85":1,"91":6,"92":6,"93":6,"99":1,"101":1,"102":1,"108":2,"109":2,"110":0,"112":2,"114":2,"115":2},"path":"/home/node/project/contracts/token/ERC20Token.sol","s":{"1":17,"2":17,"3":17,"4":17,"5":17,"6":1,"7":1,"8":1,"9":2,"10":4,"11":1,"12":5,"13":5,"14":5,"15":5,"16":5,"17":5,"18":3,"19":3,"20":3,"21":1,"22":1,"23":1,"24":1,"25":1,"26":6,"27":6,"28":6,"29":1,"30":1,"31":1,"32":2,"33":2,"34":0,"35":2,"36":2,"37":2},"b":{"1":[5,0],"2":[5,0],"3":[3,0],"4":[3,0],"5":[1,2],"6":[0,2]},"f":{"1":17,"2":1,"3":1,"4":1,"5":2,"6":4,"7":1,"8":5,"9":3,"10":6,"11":1,"12":2},"fnMap":{"1":{"name":"constructor","line":24,"loc":{"start":{"line":24,"column":2},"end":{"line":29,"column":3}}},"2":{"name":"name","line":37,"loc":{"start":{"line":37,"column":2},"end":{"line":37,"column":62}}},"3":{"name":"symbol","line":41,"loc":{"start":{"line":41,"column":2},"end":{"line":41,"column":64}}},"4":{"name":"decimal","line":45,"loc":{"start":{"line":45,"column":2},"end":{"line":45,"column":59}}},"5":{"name":"totalSupply","line":49,"loc":{"start":{"line":49,"column":2},"end":{"line":49,"column":63}}},"6":{"name":"balanceOf","line":53,"loc":{"start":{"line":53,"column":2},"end":{"line":53,"column":75}}},"7":{"name":"allowance","line":57,"loc":{"start":{"line":57,"column":2},"end":{"line":59,"column":3}}},"8":{"name":"transfer","line":63,"loc":{"start":{"line":63,"column":2},"end":{"line":64,"column":36}}},"9":{"name":"transferFrom","line":74,"loc":{"start":{"line":74,"column":2},"end":{"line":76,"column":3}}},"10":{"name":"approve","line":88,"loc":{"start":{"line":88,"column":2},"end":{"line":90,"column":3}}},"11":{"name":"increaseApproval","line":96,"loc":{"start":{"line":96,"column":2},"end":{"line":98,"column":3}}},"12":{"name":"decreaseApproval","line":105,"loc":{"start":{"line":105,"column":2},"end":{"line":107,"column":3}}}},"statementMap":{"1":{"start":{"line":30,"column":4},"end":{"line":30,"column":16}},"2":{"start":{"line":31,"column":4},"end":{"line":31,"column":20}},"3":{"start":{"line":32,"column":4},"end":{"line":32,"column":22}},"4":{"start":{"line":33,"column":4},"end":{"line":33,"column":30}},"5":{"start":{"line":34,"column":4},"end":{"line":34,"column":38}},"6":{"start":{"line":38,"column":4},"end":{"line":38,"column":16}},"7":{"start":{"line":42,"column":4},"end":{"line":42,"column":18}},"8":{"start":{"line":46,"column":4},"end":{"line":46,"column":19}},"9":{"start":{"line":50,"column":4},"end":{"line":50,"column":23}},"10":{"start":{"line":54,"column":4},"end":{"line":54,"column":27}},"11":{"start":{"line":60,"column":4},"end":{"line":60,"column":36}},"12":{"start":{"line":65,"column":4},"end":{"line":65,"column":29}},"13":{"start":{"line":66,"column":4},"end":{"line":66,"column":42}},"14":{"start":{"line":68,"column":4},"end":{"line":68,"column":58}},"15":{"start":{"line":69,"column":4},"end":{"line":69,"column":44}},"16":{"start":{"line":70,"column":4},"end":{"line":70,"column":42}},"17":{"start":{"line":71,"column":4},"end":{"line":71,"column":15}},"18":{"start":{"line":77,"column":4},"end":{"line":77,"column":29}},"19":{"start":{"line":78,"column":4},"end":{"line":78,"column":37}},"20":{"start":{"line":79,"column":4},"end":{"line":79,"column":48}},"21":{"start":{"line":81,"column":4},"end":{"line":81,"column":48}},"22":{"start":{"line":82,"column":4},"end":{"line":82,"column":44}},"23":{"start":{"line":83,"column":4},"end":{"line":83,"column":70}},"24":{"start":{"line":84,"column":4},"end":{"line":84,"column":37}},"25":{"start":{"line":85,"column":4},"end":{"line":85,"column":15}},"26":{"start":{"line":91,"column":4},"end":{"line":91,"column":41}},"27":{"start":{"line":92,"column":4},"end":{"line":92,"column":47}},"28":{"start":{"line":93,"column":4},"end":{"line":93,"column":15}},"29":{"start":{"line":99,"column":4},"end":{"line":99,"column":2581}},"30":{"start":{"line":101,"column":4},"end":{"line":101,"column":70}},"31":{"start":{"line":102,"column":4},"end":{"line":102,"column":15}},"32":{"start":{"line":108,"column":4},"end":{"line":108,"column":49}},"33":{"start":{"line":109,"column":4},"end":{"line":109,"column":2879}},"34":{"start":{"line":110,"column":6},"end":{"line":110,"column":38}},"35":{"start":{"line":112,"column":6},"end":{"line":112,"column":67}},"36":{"start":{"line":114,"column":4},"end":{"line":114,"column":70}},"37":{"start":{"line":115,"column":4},"end":{"line":115,"column":15}}},"branchMap":{"1":{"line":65,"type":"if","locations":[{"start":{"line":65,"column":4},"end":{"line":65,"column":4}},{"start":{"line":65,"column":4},"end":{"line":65,"column":4}}]},"2":{"line":66,"type":"if","locations":[{"start":{"line":66,"column":4},"end":{"line":66,"column":4}},{"start":{"line":66,"column":4},"end":{"line":66,"column":4}}]},"3":{"line":77,"type":"if","locations":[{"start":{"line":77,"column":4},"end":{"line":77,"column":4}},{"start":{"line":77,"column":4},"end":{"line":77,"column":4}}]},"4":{"line":78,"type":"if","locations":[{"start":{"line":78,"column":4},"end":{"line":78,"column":4}},{"start":{"line":78,"column":4},"end":{"line":78,"column":4}}]},"5":{"line":79,"type":"if","locations":[{"start":{"line":79,"column":4},"end":{"line":79,"column":4}},{"start":{"line":79,"column":4},"end":{"line":79,"column":4}}]},"6":{"line":109,"type":"if","locations":[{"start":{"line":109,"column":4},"end":{"line":109,"column":4}},{"start":{"line":109,"column":4},"end":{"line":109,"column":4}}]}}}}
diff --git a/coverage/governance/Operator.sol.html b/coverage/governance/Operator.sol.html
deleted file mode 100644
index 8a18569..0000000
--- a/coverage/governance/Operator.sol.html
+++ /dev/null
@@ -1,269 +0,0 @@
-
-
-
- Code coverage report for governance/Operator.sol
-
-
-
-
-
-
-
-
-
-
-
-
- 100%
- Statements
- 10/10
-
-
- 100%
- Branches
- 4/4
-
-
- 100%
- Functions
- 4/4
-
-
- 100%
- Lines
- 12/12
-
-
-
-
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-208×
-203×
-
-
-
-
-
-
-2×
-
-
-
-
-
-
-2×
-
-
-
-
-
-
-
-
-
-
-59×
-
-57×
-2×
-
-57×
-
-57×
-65×
-65×
-
-57×
-
-
- pragma solidity >=0.6.0 <0.7.0;
-
-import "./Ownable.sol";
-
-/**
- * @title Operator
- * @dev The Operator contract contains list of addresses authorized to specific operations
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- *
- * Error messages
- * OP01: Message sender must be an authority
- */
-contract Operator is Ownable {
-
- mapping (address => uint8) operatorIds;
- address[] public operators;
-
- event OperatorsCleared(uint256 size);
- event OperatorDefined(
- bytes32 name,
- address _address
- );
-
- /**
- * @dev Throws if called by any account other than the operator
- */
- modifier onlyOperator {
- require(operatorIds[msg.sender] > 0, "OP01");
- _;
- }
-
- /**
- * @dev return the count of operator
- */
- function operatorCount() public view returns (uint256) {
- return operators.length;
- }
-
- /**
- * @dev return the address associated to the _operatorId
- */
- function operatorAddress(uint8 _operatorId) public view returns (address) {
- return operators[_operatorId];
- }
-
- /**
- * @dev defineOperator role
- * @param _names operators names
- * @param _addresses operator addresses.
- */
- function defineOperators(bytes32[] memory _names, address[] memory _addresses)
- public onlyOwner
- {
- require(_names.length == _addresses.length, "OP02");
-
- for (uint256 i = 0; i < operators.length; i++) {
- delete operatorIds[operators[i]];
- }
- emit OperatorsCleared(operators.length);
-
- for (uint256 j = 0; j < _names.length; j++) {
- emit OperatorDefined(_names[j], _addresses[j]);
- operatorIds[_addresses[j]] = uint8(j + 1);
- }
- operators = _addresses;
- }
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/governance/Ownable.sol.html b/coverage/governance/Ownable.sol.html
deleted file mode 100644
index 881f0f4..0000000
--- a/coverage/governance/Ownable.sol.html
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
- Code coverage report for governance/Ownable.sol
-
-
-
-
-
-
-
-
-
-
-
-
- 25%
- Statements
- 2/8
-
-
- 50%
- Branches
- 2/4
-
-
- 40%
- Functions
- 2/5
-
-
- 33.33%
- Lines
- 3/9
-
-
-
-
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-61×
-
-
-
-
-
-
-61×
-59×
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- pragma solidity >=0.6.0 <0.7.0;
-
-
-/**
- * @title Ownable
- * @dev The Ownable contract define an owner address and methods to transfer ownership
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-contract Ownable {
-
- address public owner;
-
- event OwnershipRenounced(address indexed previousOwner);
- event OwnershipTransferred(
- address indexed previousOwner,
- address indexed newOwner
- );
-
- /**
- * @dev The Ownable constructor sets the original `owner` of the contract to the sender
- * account.
- */
- constructor() public {
- owner = msg.sender;
- }
-
- /**
- * @dev Throws if called by any account other than the owner.
- */
- modifier onlyOwner() {
- require(msg.sender == owner);
- _;
- }
-
- /**
- * @dev Allows the current owner to relinquish control of the contract.
- */
- function renounceOwnership() public onlyOwner {
- emit OwnershipRenounced(owner);
- owner = address(0) ;
- }
-
- /**
- * @dev Allows the current owner to transfer control of the contract to a newOwner.
- * @param _newOwner The address to transfer ownership to.
- */
- fu nction transferOwnership(address _newOwner) public onlyOwner {
- _transferOwnership(_newOwner) ;
- }
-
- /**
- * @dev Transfers control of the contract to a newOwner.
- * @param _newOwner The address to transfer ownership to.
- */
- function _transferOwnership(address _newOwner) internal {
- require(_newOwner != address(0)) ;
- emit OwnershipTransferred(owner, _newOwner);
- owner = _newOwner ;
- }
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/governance/index.html b/coverage/governance/index.html
deleted file mode 100644
index 7a00622..0000000
--- a/coverage/governance/index.html
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
-
- Code coverage report for governance/
-
-
-
-
-
-
-
-
-
-
-
-
- 66.67%
- Statements
- 12/18
-
-
- 75%
- Branches
- 6/8
-
-
- 66.67%
- Functions
- 6/9
-
-
- 71.43%
- Lines
- 15/21
-
-
-
-
-
-
-
-
- File
-
- Statements
-
- Branches
-
- Functions
-
- Lines
-
-
-
-
- Operator.sol
-
- 100%
- 10/10
- 100%
- 4/4
- 100%
- 4/4
- 100%
- 12/12
-
-
-
- Ownable.sol
-
- 25%
- 2/8
- 50%
- 2/4
- 40%
- 2/5
- 33.33%
- 3/9
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/index.html b/coverage/index.html
deleted file mode 100644
index 683c961..0000000
--- a/coverage/index.html
+++ /dev/null
@@ -1,158 +0,0 @@
-
-
-
- Code coverage report for All files
-
-
-
-
-
-
-
-
-
-
- /
-
-
-
- 45.64%
- Statements
- 110/241
-
-
- 41.67%
- Branches
- 40/96
-
-
- 50%
- Functions
- 48/96
-
-
- 46.15%
- Lines
- 114/247
-
-
-
-
-
-
-
-
- File
-
- Statements
-
- Branches
-
- Functions
-
- Lines
-
-
-
-
- governance/
-
- 66.67%
- 12/18
- 75%
- 6/8
- 66.67%
- 6/9
- 71.43%
- 15/21
-
-
-
- interface/
-
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
-
-
-
- math/
-
- 45.45%
- 5/11
- 25%
- 2/8
- 50%
- 2/4
- 45.45%
- 5/11
-
-
-
- registry/
-
- 98.28%
- 57/58
- 96.15%
- 25/26
- 100%
- 28/28
- 98.31%
- 58/59
-
-
-
- routing/
-
- 0%
- 0/58
- 0%
- 0/24
- 0%
- 0/19
- 0%
- 0/60
-
-
-
- token/
-
- 37.5%
- 36/96
- 23.33%
- 7/30
- 33.33%
- 12/36
- 37.5%
- 36/96
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/interface/ERC20.sol.html b/coverage/interface/ERC20.sol.html
deleted file mode 100644
index 9b0c330..0000000
--- a/coverage/interface/ERC20.sol.html
+++ /dev/null
@@ -1,176 +0,0 @@
-
-
-
- Code coverage report for interface/ERC20.sol
-
-
-
-
-
-
-
-
-
-
-
-
- 100%
- Statements
- 0/0
-
-
- 100%
- Branches
- 0/0
-
-
- 100%
- Functions
- 0/0
-
-
- 100%
- Lines
- 0/0
-
-
-
-
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- pragma solidity >=0.5.0 <0.6.0;
-
-
-/**
- * @title ERC20 interface
- * @dev see https://github.com/ethereum/EIPs/issues/20
- * @dev see https://github.com/ethereum/EIPs/issues/179
- */
-contract ERC20 {
- function name() public view returns (string memory);
- function symbol() public view returns (string memory);
- function decimal() public view returns (uint256);
- function totalSupply() public view returns (uint256);
- function balanceOf(address who) public view returns (uint256);
- function transfer(address to, uint256 value) public returns (bool);
-
- function allowance(address owner, address spender)
- public view returns (uint256);
-
- function transferFrom(address from, address to, uint256 value)
- public returns (bool);
-
- function approve(address spender, uint256 value) public returns (bool);
-
- function increaseApproval(address spender, uint addedValue)
- public returns (bool);
-
- function decreaseApproval(address spender, uint subtractedValue)
- public returns (bool);
-
- event Transfer(address indexed from, address indexed to, uint256 value);
- event Approval(
- address indexed owner,
- address indexed spender,
- uint256 value
- );
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/interface/IERC20.sol.html b/coverage/interface/IERC20.sol.html
deleted file mode 100644
index 2818733..0000000
--- a/coverage/interface/IERC20.sol.html
+++ /dev/null
@@ -1,179 +0,0 @@
-
-
-
- Code coverage report for interface/IERC20.sol
-
-
-
-
-
-
-
-
-
-
-
-
- 100%
- Statements
- 0/0
-
-
- 100%
- Branches
- 0/0
-
-
- 100%
- Functions
- 0/0
-
-
- 100%
- Lines
- 0/0
-
-
-
-
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- pragma solidity >=0.6.0 <0.7.0;
-
-
-/**
- * @title IERC20 interface
- * @dev see https://github.com/ethereum/EIPs/issues/20
- * @dev see https://github.com/ethereum/EIPs/issues/179
- */
-abstract contract IERC20 {
-
- event Transfer(address indexed from, address indexed to, uint256 value);
- event Approval(
- address indexed owner,
- address indexed spender,
- uint256 value
- );
-
- function name() virtual public view returns (string memory);
- function symbol() virtual public view returns (string memory);
- function decimal() virtual public view returns (uint256);
- function totalSupply() virtual public view returns (uint256);
- function balanceOf(address who) virtual public view returns (uint256);
- function transfer(address to, uint256 value) virtual public returns (bool);
-
- function allowance(address owner, address spender)
- virtual public view returns (uint256);
-
- function transferFrom(address from, address to, uint256 value)
- virtual public returns (bool);
-
- function approve(address spender, uint256 value) virtual public returns (bool);
-
- function increaseApproval(address spender, uint addedValue)
- virtual public returns (bool);
-
- function decreaseApproval(address spender, uint subtractedValue)
- virtual public returns (bool);
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/interface/IRouter.sol.html b/coverage/interface/IRouter.sol.html
deleted file mode 100644
index 0d59012..0000000
--- a/coverage/interface/IRouter.sol.html
+++ /dev/null
@@ -1,173 +0,0 @@
-
-
-
- Code coverage report for interface/IRouter.sol
-
-
-
-
-
-
-
-
-
-
-
-
- 100%
- Statements
- 0/0
-
-
- 100%
- Branches
- 0/0
-
-
- 100%
- Functions
- 0/0
-
-
- 100%
- Lines
- 0/0
-
-
-
-
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- pragma solidity >=0.6.0 <0.7.0;
-
-
-/**
- * @title IRouter
- *
- * To avoid abuse the configuration need to be locked before the redirection is active
- *
- * Error messages
- * RO01: configuration is locked
- * RO02: configuration has not been locked
- * RO03: no valid routes were found
- * RO04: redirection has failed
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-abstract contract IRouter {
-
- event ConfigLocked();
- event RouteDefined(address origin, address[] destinations, bytes4 destinationAbi);
- event DestinationSwitched(address origin, uint256 activeDestination);
-
- receive() virtual external payable;
- fallback() virtual external payable;
- function destinations(address _origin) virtual public view returns (address[] memory);
- function destinationAbi(address _origin) virtual public view returns (bytes4);
- function isConfigLocked() virtual public view returns (bool);
-
- function setRoute(
- address _origin,
- address[] memory _destinations,
- bytes4 _destinationAbi
- ) virtual public returns (bool);
-
- function lockConfig() virtual public;
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/interface/IUserRegistry.sol.html b/coverage/interface/IUserRegistry.sol.html
deleted file mode 100644
index 0cba924..0000000
--- a/coverage/interface/IUserRegistry.sol.html
+++ /dev/null
@@ -1,242 +0,0 @@
-
-
-
- Code coverage report for interface/IUserRegistry.sol
-
-
-
-
-
-
-
-
-
-
-
-
- 100%
- Statements
- 0/0
-
-
- 100%
- Branches
- 0/0
-
-
- 100%
- Functions
- 0/0
-
-
- 100%
- Lines
- 0/0
-
-
-
-
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- pragma solidity >=0.6.0 <0.7.0;
-
-
-/**
- * @title IUserRegistry
- * @dev IUserRegistry interface
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- **/
-abstract contract IUserRegistry {
-
- event UserRegistered(uint256 indexed userId);
- event AddressAttached(uint256 indexed userId, address address_);
- event AddressDetached(uint256 indexed userId, address address_);
-
- function userCount() virtual public view returns (uint256);
- function userId(address _address) virtual public view returns (uint256);
- function validUserId(address _address) virtual public view returns (uint256);
- function validUntilTime(uint256 _userId) virtual public view returns (uint256);
- function suspended(uint256 _userId) virtual public view returns (bool);
- function extended(uint256 _userId, uint256 _key)
- virtual public view returns (uint256);
-
- function isAddressValid(address _address) virtual public view returns (bool);
- function isValid(uint256 _userId) virtual public view returns (bool);
-
- function registerUser(address _address, uint256 _validUntilTime) virtual public;
- function registerManyUsers(address[] memory _addresses, uint256 _validUntilTime)
- virtual public;
-
- function attachAddress(uint256 _userId, address _address) virtual public;
- function attachManyAddresses(uint256[] memory _userIds, address[] memory _addresses)
- virtual public;
-
- function detachAddress(address _address) virtual public;
- function detachManyAddresses(address[] memory _addresses)
- virtual public;
-
- function detachSelf() virtual public;
- function detachSelfAddress(address _address) virtual public;
- function suspendUser(uint256 _userId) virtual public;
- function unsuspendUser(uint256 _userId) virtual public;
- function suspendManyUsers(uint256[] memory _userIds) virtual public;
- function unsuspendManyUsers(uint256[] memory _userIds) virtual public;
- function updateUser(uint256 _userId, uint256 _validUntil, bool _suspended)
- virtual public;
-
- function updateManyUsers(
- uint256[] memory _userIds,
- uint256 _validUntil,
- bool _suspended) virtual public;
-
- function updateUserExtended(uint256 _userId, uint256 _key, uint256 _value)
- virtual public;
-
- function updateManyUsersExtended(
- uint256[] memory _userIds,
- uint256 _key,
- uint256 _value) virtual public;
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/interface/index.html b/coverage/interface/index.html
deleted file mode 100644
index 275e780..0000000
--- a/coverage/interface/index.html
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
- Code coverage report for interface/
-
-
-
-
-
-
-
-
-
-
-
-
- 100%
- Statements
- 0/0
-
-
- 100%
- Branches
- 0/0
-
-
- 100%
- Functions
- 0/0
-
-
- 100%
- Lines
- 0/0
-
-
-
-
-
-
-
-
- File
-
- Statements
-
- Branches
-
- Functions
-
- Lines
-
-
-
-
- IERC20.sol
-
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
-
-
-
- IRouter.sol
-
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
-
-
-
- IUserRegistry.sol
-
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css
deleted file mode 100644
index 29737bc..0000000
--- a/coverage/lcov-report/base.css
+++ /dev/null
@@ -1,213 +0,0 @@
-body, html {
- margin:0; padding: 0;
- height: 100%;
-}
-body {
- font-family: Helvetica Neue, Helvetica, Arial;
- font-size: 14px;
- color:#333;
-}
-.small { font-size: 12px; }
-*, *:after, *:before {
- -webkit-box-sizing:border-box;
- -moz-box-sizing:border-box;
- box-sizing:border-box;
- }
-h1 { font-size: 20px; margin: 0;}
-h2 { font-size: 14px; }
-pre {
- font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
- margin: 0;
- padding: 0;
- -moz-tab-size: 2;
- -o-tab-size: 2;
- tab-size: 2;
-}
-a { color:#0074D9; text-decoration:none; }
-a:hover { text-decoration:underline; }
-.strong { font-weight: bold; }
-.space-top1 { padding: 10px 0 0 0; }
-.pad2y { padding: 20px 0; }
-.pad1y { padding: 10px 0; }
-.pad2x { padding: 0 20px; }
-.pad2 { padding: 20px; }
-.pad1 { padding: 10px; }
-.space-left2 { padding-left:55px; }
-.space-right2 { padding-right:20px; }
-.center { text-align:center; }
-.clearfix { display:block; }
-.clearfix:after {
- content:'';
- display:block;
- height:0;
- clear:both;
- visibility:hidden;
- }
-.fl { float: left; }
-@media only screen and (max-width:640px) {
- .col3 { width:100%; max-width:100%; }
- .hide-mobile { display:none!important; }
-}
-
-.quiet {
- color: #7f7f7f;
- color: rgba(0,0,0,0.5);
-}
-.quiet a { opacity: 0.7; }
-
-.fraction {
- font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
- font-size: 10px;
- color: #555;
- background: #E8E8E8;
- padding: 4px 5px;
- border-radius: 3px;
- vertical-align: middle;
-}
-
-div.path a:link, div.path a:visited { color: #333; }
-table.coverage {
- border-collapse: collapse;
- margin: 10px 0 0 0;
- padding: 0;
-}
-
-table.coverage td {
- margin: 0;
- padding: 0;
- vertical-align: top;
-}
-table.coverage td.line-count {
- text-align: right;
- padding: 0 5px 0 20px;
-}
-table.coverage td.line-coverage {
- text-align: right;
- padding-right: 10px;
- min-width:20px;
-}
-
-table.coverage td span.cline-any {
- display: inline-block;
- padding: 0 5px;
- width: 100%;
-}
-.missing-if-branch {
- display: inline-block;
- margin-right: 5px;
- border-radius: 3px;
- position: relative;
- padding: 0 4px;
- background: #333;
- color: yellow;
-}
-
-.skip-if-branch {
- display: none;
- margin-right: 10px;
- position: relative;
- padding: 0 4px;
- background: #ccc;
- color: white;
-}
-.missing-if-branch .typ, .skip-if-branch .typ {
- color: inherit !important;
-}
-.coverage-summary {
- border-collapse: collapse;
- width: 100%;
-}
-.coverage-summary tr { border-bottom: 1px solid #bbb; }
-.keyline-all { border: 1px solid #ddd; }
-.coverage-summary td, .coverage-summary th { padding: 10px; }
-.coverage-summary tbody { border: 1px solid #bbb; }
-.coverage-summary td { border-right: 1px solid #bbb; }
-.coverage-summary td:last-child { border-right: none; }
-.coverage-summary th {
- text-align: left;
- font-weight: normal;
- white-space: nowrap;
-}
-.coverage-summary th.file { border-right: none !important; }
-.coverage-summary th.pct { }
-.coverage-summary th.pic,
-.coverage-summary th.abs,
-.coverage-summary td.pct,
-.coverage-summary td.abs { text-align: right; }
-.coverage-summary td.file { white-space: nowrap; }
-.coverage-summary td.pic { min-width: 120px !important; }
-.coverage-summary tfoot td { }
-
-.coverage-summary .sorter {
- height: 10px;
- width: 7px;
- display: inline-block;
- margin-left: 0.5em;
- background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
-}
-.coverage-summary .sorted .sorter {
- background-position: 0 -20px;
-}
-.coverage-summary .sorted-desc .sorter {
- background-position: 0 -10px;
-}
-.status-line { height: 10px; }
-/* dark red */
-.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
-.low .chart { border:1px solid #C21F39 }
-/* medium red */
-.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
-/* light red */
-.low, .cline-no { background:#FCE1E5 }
-/* light green */
-.high, .cline-yes { background:rgb(230,245,208) }
-/* medium green */
-.cstat-yes { background:rgb(161,215,106) }
-/* dark green */
-.status-line.high, .high .cover-fill { background:rgb(77,146,33) }
-.high .chart { border:1px solid rgb(77,146,33) }
-/* dark yellow (gold) */
-.medium .chart { border:1px solid #f9cd0b; }
-.status-line.medium, .medium .cover-fill { background: #f9cd0b; }
-/* light yellow */
-.medium { background: #fff4c2; }
-/* light gray */
-span.cline-neutral { background: #eaeaea; }
-
-.cbranch-no { background: yellow !important; color: #111; }
-
-.cstat-skip { background: #ddd; color: #111; }
-.fstat-skip { background: #ddd; color: #111 !important; }
-.cbranch-skip { background: #ddd !important; color: #111; }
-
-
-.cover-fill, .cover-empty {
- display:inline-block;
- height: 12px;
-}
-.chart {
- line-height: 0;
-}
-.cover-empty {
- background: white;
-}
-.cover-full {
- border-right: none !important;
-}
-pre.prettyprint {
- border: none !important;
- padding: 0 !important;
- margin: 0 !important;
-}
-.com { color: #999 !important; }
-.ignore-none { color: #999; font-weight: normal; }
-
-.wrapper {
- min-height: 100%;
- height: auto !important;
- height: 100%;
- margin: 0 auto -48px;
-}
-.footer, .push {
- height: 48px;
-}
diff --git a/coverage/lcov-report/governance/Operator.sol.html b/coverage/lcov-report/governance/Operator.sol.html
deleted file mode 100644
index 8a18569..0000000
--- a/coverage/lcov-report/governance/Operator.sol.html
+++ /dev/null
@@ -1,269 +0,0 @@
-
-
-
- Code coverage report for governance/Operator.sol
-
-
-
-
-
-
-
-
-
-
-
-
- 100%
- Statements
- 10/10
-
-
- 100%
- Branches
- 4/4
-
-
- 100%
- Functions
- 4/4
-
-
- 100%
- Lines
- 12/12
-
-
-
-
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-208×
-203×
-
-
-
-
-
-
-2×
-
-
-
-
-
-
-2×
-
-
-
-
-
-
-
-
-
-
-59×
-
-57×
-2×
-
-57×
-
-57×
-65×
-65×
-
-57×
-
-
- pragma solidity >=0.6.0 <0.7.0;
-
-import "./Ownable.sol";
-
-/**
- * @title Operator
- * @dev The Operator contract contains list of addresses authorized to specific operations
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- *
- * Error messages
- * OP01: Message sender must be an authority
- */
-contract Operator is Ownable {
-
- mapping (address => uint8) operatorIds;
- address[] public operators;
-
- event OperatorsCleared(uint256 size);
- event OperatorDefined(
- bytes32 name,
- address _address
- );
-
- /**
- * @dev Throws if called by any account other than the operator
- */
- modifier onlyOperator {
- require(operatorIds[msg.sender] > 0, "OP01");
- _;
- }
-
- /**
- * @dev return the count of operator
- */
- function operatorCount() public view returns (uint256) {
- return operators.length;
- }
-
- /**
- * @dev return the address associated to the _operatorId
- */
- function operatorAddress(uint8 _operatorId) public view returns (address) {
- return operators[_operatorId];
- }
-
- /**
- * @dev defineOperator role
- * @param _names operators names
- * @param _addresses operator addresses.
- */
- function defineOperators(bytes32[] memory _names, address[] memory _addresses)
- public onlyOwner
- {
- require(_names.length == _addresses.length, "OP02");
-
- for (uint256 i = 0; i < operators.length; i++) {
- delete operatorIds[operators[i]];
- }
- emit OperatorsCleared(operators.length);
-
- for (uint256 j = 0; j < _names.length; j++) {
- emit OperatorDefined(_names[j], _addresses[j]);
- operatorIds[_addresses[j]] = uint8(j + 1);
- }
- operators = _addresses;
- }
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/lcov-report/governance/Ownable.sol.html b/coverage/lcov-report/governance/Ownable.sol.html
deleted file mode 100644
index 881f0f4..0000000
--- a/coverage/lcov-report/governance/Ownable.sol.html
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
- Code coverage report for governance/Ownable.sol
-
-
-
-
-
-
-
-
-
-
-
-
- 25%
- Statements
- 2/8
-
-
- 50%
- Branches
- 2/4
-
-
- 40%
- Functions
- 2/5
-
-
- 33.33%
- Lines
- 3/9
-
-
-
-
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-61×
-
-
-
-
-
-
-61×
-59×
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- pragma solidity >=0.6.0 <0.7.0;
-
-
-/**
- * @title Ownable
- * @dev The Ownable contract define an owner address and methods to transfer ownership
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-contract Ownable {
-
- address public owner;
-
- event OwnershipRenounced(address indexed previousOwner);
- event OwnershipTransferred(
- address indexed previousOwner,
- address indexed newOwner
- );
-
- /**
- * @dev The Ownable constructor sets the original `owner` of the contract to the sender
- * account.
- */
- constructor() public {
- owner = msg.sender;
- }
-
- /**
- * @dev Throws if called by any account other than the owner.
- */
- modifier onlyOwner() {
- require(msg.sender == owner);
- _;
- }
-
- /**
- * @dev Allows the current owner to relinquish control of the contract.
- */
- function renounceOwnership() public onlyOwner {
- emit OwnershipRenounced(owner);
- owner = address(0) ;
- }
-
- /**
- * @dev Allows the current owner to transfer control of the contract to a newOwner.
- * @param _newOwner The address to transfer ownership to.
- */
- fu nction transferOwnership(address _newOwner) public onlyOwner {
- _transferOwnership(_newOwner) ;
- }
-
- /**
- * @dev Transfers control of the contract to a newOwner.
- * @param _newOwner The address to transfer ownership to.
- */
- function _transferOwnership(address _newOwner) internal {
- require(_newOwner != address(0)) ;
- emit OwnershipTransferred(owner, _newOwner);
- owner = _newOwner ;
- }
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/lcov-report/governance/index.html b/coverage/lcov-report/governance/index.html
deleted file mode 100644
index 7a00622..0000000
--- a/coverage/lcov-report/governance/index.html
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
-
- Code coverage report for governance/
-
-
-
-
-
-
-
-
-
-
-
-
- 66.67%
- Statements
- 12/18
-
-
- 75%
- Branches
- 6/8
-
-
- 66.67%
- Functions
- 6/9
-
-
- 71.43%
- Lines
- 15/21
-
-
-
-
-
-
-
-
- File
-
- Statements
-
- Branches
-
- Functions
-
- Lines
-
-
-
-
- Operator.sol
-
- 100%
- 10/10
- 100%
- 4/4
- 100%
- 4/4
- 100%
- 12/12
-
-
-
- Ownable.sol
-
- 25%
- 2/8
- 50%
- 2/4
- 40%
- 2/5
- 33.33%
- 3/9
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html
deleted file mode 100644
index 683c961..0000000
--- a/coverage/lcov-report/index.html
+++ /dev/null
@@ -1,158 +0,0 @@
-
-
-
- Code coverage report for All files
-
-
-
-
-
-
-
-
-
-
- /
-
-
-
- 45.64%
- Statements
- 110/241
-
-
- 41.67%
- Branches
- 40/96
-
-
- 50%
- Functions
- 48/96
-
-
- 46.15%
- Lines
- 114/247
-
-
-
-
-
-
-
-
- File
-
- Statements
-
- Branches
-
- Functions
-
- Lines
-
-
-
-
- governance/
-
- 66.67%
- 12/18
- 75%
- 6/8
- 66.67%
- 6/9
- 71.43%
- 15/21
-
-
-
- interface/
-
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
-
-
-
- math/
-
- 45.45%
- 5/11
- 25%
- 2/8
- 50%
- 2/4
- 45.45%
- 5/11
-
-
-
- registry/
-
- 98.28%
- 57/58
- 96.15%
- 25/26
- 100%
- 28/28
- 98.31%
- 58/59
-
-
-
- routing/
-
- 0%
- 0/58
- 0%
- 0/24
- 0%
- 0/19
- 0%
- 0/60
-
-
-
- token/
-
- 37.5%
- 36/96
- 23.33%
- 7/30
- 33.33%
- 12/36
- 37.5%
- 36/96
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/lcov-report/interface/ERC20.sol.html b/coverage/lcov-report/interface/ERC20.sol.html
deleted file mode 100644
index 9b0c330..0000000
--- a/coverage/lcov-report/interface/ERC20.sol.html
+++ /dev/null
@@ -1,176 +0,0 @@
-
-
-
- Code coverage report for interface/ERC20.sol
-
-
-
-
-
-
-
-
-
-
-
-
- 100%
- Statements
- 0/0
-
-
- 100%
- Branches
- 0/0
-
-
- 100%
- Functions
- 0/0
-
-
- 100%
- Lines
- 0/0
-
-
-
-
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- pragma solidity >=0.5.0 <0.6.0;
-
-
-/**
- * @title ERC20 interface
- * @dev see https://github.com/ethereum/EIPs/issues/20
- * @dev see https://github.com/ethereum/EIPs/issues/179
- */
-contract ERC20 {
- function name() public view returns (string memory);
- function symbol() public view returns (string memory);
- function decimal() public view returns (uint256);
- function totalSupply() public view returns (uint256);
- function balanceOf(address who) public view returns (uint256);
- function transfer(address to, uint256 value) public returns (bool);
-
- function allowance(address owner, address spender)
- public view returns (uint256);
-
- function transferFrom(address from, address to, uint256 value)
- public returns (bool);
-
- function approve(address spender, uint256 value) public returns (bool);
-
- function increaseApproval(address spender, uint addedValue)
- public returns (bool);
-
- function decreaseApproval(address spender, uint subtractedValue)
- public returns (bool);
-
- event Transfer(address indexed from, address indexed to, uint256 value);
- event Approval(
- address indexed owner,
- address indexed spender,
- uint256 value
- );
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/lcov-report/interface/IERC20.sol.html b/coverage/lcov-report/interface/IERC20.sol.html
deleted file mode 100644
index 2818733..0000000
--- a/coverage/lcov-report/interface/IERC20.sol.html
+++ /dev/null
@@ -1,179 +0,0 @@
-
-
-
- Code coverage report for interface/IERC20.sol
-
-
-
-
-
-
-
-
-
-
-
-
- 100%
- Statements
- 0/0
-
-
- 100%
- Branches
- 0/0
-
-
- 100%
- Functions
- 0/0
-
-
- 100%
- Lines
- 0/0
-
-
-
-
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- pragma solidity >=0.6.0 <0.7.0;
-
-
-/**
- * @title IERC20 interface
- * @dev see https://github.com/ethereum/EIPs/issues/20
- * @dev see https://github.com/ethereum/EIPs/issues/179
- */
-abstract contract IERC20 {
-
- event Transfer(address indexed from, address indexed to, uint256 value);
- event Approval(
- address indexed owner,
- address indexed spender,
- uint256 value
- );
-
- function name() virtual public view returns (string memory);
- function symbol() virtual public view returns (string memory);
- function decimal() virtual public view returns (uint256);
- function totalSupply() virtual public view returns (uint256);
- function balanceOf(address who) virtual public view returns (uint256);
- function transfer(address to, uint256 value) virtual public returns (bool);
-
- function allowance(address owner, address spender)
- virtual public view returns (uint256);
-
- function transferFrom(address from, address to, uint256 value)
- virtual public returns (bool);
-
- function approve(address spender, uint256 value) virtual public returns (bool);
-
- function increaseApproval(address spender, uint addedValue)
- virtual public returns (bool);
-
- function decreaseApproval(address spender, uint subtractedValue)
- virtual public returns (bool);
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/lcov-report/interface/IRouter.sol.html b/coverage/lcov-report/interface/IRouter.sol.html
deleted file mode 100644
index 0d59012..0000000
--- a/coverage/lcov-report/interface/IRouter.sol.html
+++ /dev/null
@@ -1,173 +0,0 @@
-
-
-
- Code coverage report for interface/IRouter.sol
-
-
-
-
-
-
-
-
-
-
-
-
- 100%
- Statements
- 0/0
-
-
- 100%
- Branches
- 0/0
-
-
- 100%
- Functions
- 0/0
-
-
- 100%
- Lines
- 0/0
-
-
-
-
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- pragma solidity >=0.6.0 <0.7.0;
-
-
-/**
- * @title IRouter
- *
- * To avoid abuse the configuration need to be locked before the redirection is active
- *
- * Error messages
- * RO01: configuration is locked
- * RO02: configuration has not been locked
- * RO03: no valid routes were found
- * RO04: redirection has failed
- *
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- */
-abstract contract IRouter {
-
- event ConfigLocked();
- event RouteDefined(address origin, address[] destinations, bytes4 destinationAbi);
- event DestinationSwitched(address origin, uint256 activeDestination);
-
- receive() virtual external payable;
- fallback() virtual external payable;
- function destinations(address _origin) virtual public view returns (address[] memory);
- function destinationAbi(address _origin) virtual public view returns (bytes4);
- function isConfigLocked() virtual public view returns (bool);
-
- function setRoute(
- address _origin,
- address[] memory _destinations,
- bytes4 _destinationAbi
- ) virtual public returns (bool);
-
- function lockConfig() virtual public;
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/lcov-report/interface/IUserRegistry.sol.html b/coverage/lcov-report/interface/IUserRegistry.sol.html
deleted file mode 100644
index 0cba924..0000000
--- a/coverage/lcov-report/interface/IUserRegistry.sol.html
+++ /dev/null
@@ -1,242 +0,0 @@
-
-
-
- Code coverage report for interface/IUserRegistry.sol
-
-
-
-
-
-
-
-
-
-
-
-
- 100%
- Statements
- 0/0
-
-
- 100%
- Branches
- 0/0
-
-
- 100%
- Functions
- 0/0
-
-
- 100%
- Lines
- 0/0
-
-
-
-
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- pragma solidity >=0.6.0 <0.7.0;
-
-
-/**
- * @title IUserRegistry
- * @dev IUserRegistry interface
- * @author Cyril Lapinte - <cyril.lapinte@gmail.com>
- **/
-abstract contract IUserRegistry {
-
- event UserRegistered(uint256 indexed userId);
- event AddressAttached(uint256 indexed userId, address address_);
- event AddressDetached(uint256 indexed userId, address address_);
-
- function userCount() virtual public view returns (uint256);
- function userId(address _address) virtual public view returns (uint256);
- function validUserId(address _address) virtual public view returns (uint256);
- function validUntilTime(uint256 _userId) virtual public view returns (uint256);
- function suspended(uint256 _userId) virtual public view returns (bool);
- function extended(uint256 _userId, uint256 _key)
- virtual public view returns (uint256);
-
- function isAddressValid(address _address) virtual public view returns (bool);
- function isValid(uint256 _userId) virtual public view returns (bool);
-
- function registerUser(address _address, uint256 _validUntilTime) virtual public;
- function registerManyUsers(address[] memory _addresses, uint256 _validUntilTime)
- virtual public;
-
- function attachAddress(uint256 _userId, address _address) virtual public;
- function attachManyAddresses(uint256[] memory _userIds, address[] memory _addresses)
- virtual public;
-
- function detachAddress(address _address) virtual public;
- function detachManyAddresses(address[] memory _addresses)
- virtual public;
-
- function detachSelf() virtual public;
- function detachSelfAddress(address _address) virtual public;
- function suspendUser(uint256 _userId) virtual public;
- function unsuspendUser(uint256 _userId) virtual public;
- function suspendManyUsers(uint256[] memory _userIds) virtual public;
- function unsuspendManyUsers(uint256[] memory _userIds) virtual public;
- function updateUser(uint256 _userId, uint256 _validUntil, bool _suspended)
- virtual public;
-
- function updateManyUsers(
- uint256[] memory _userIds,
- uint256 _validUntil,
- bool _suspended) virtual public;
-
- function updateUserExtended(uint256 _userId, uint256 _key, uint256 _value)
- virtual public;
-
- function updateManyUsersExtended(
- uint256[] memory _userIds,
- uint256 _key,
- uint256 _value) virtual public;
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/lcov-report/interface/index.html b/coverage/lcov-report/interface/index.html
deleted file mode 100644
index 275e780..0000000
--- a/coverage/lcov-report/interface/index.html
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
- Code coverage report for interface/
-
-
-
-
-
-
-
-
-
-
-
-
- 100%
- Statements
- 0/0
-
-
- 100%
- Branches
- 0/0
-
-
- 100%
- Functions
- 0/0
-
-
- 100%
- Lines
- 0/0
-
-
-
-
-
-
-
-
- File
-
- Statements
-
- Branches
-
- Functions
-
- Lines
-
-
-
-
- IERC20.sol
-
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
-
-
-
- IRouter.sol
-
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
-
-
-
- IUserRegistry.sol
-
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
- 100%
- 0/0
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/lcov-report/math/SafeMath.sol.html b/coverage/lcov-report/math/SafeMath.sol.html
deleted file mode 100644
index d451179..0000000
--- a/coverage/lcov-report/math/SafeMath.sol.html
+++ /dev/null
@@ -1,221 +0,0 @@
-
-
-
- Code coverage report for math/SafeMath.sol
-
-
-
-
-
-
-
-
-
-
-
-
- 45.45%
- Statements
- 5/11
-
-
- 25%
- Branches
- 2/8
-
-
- 50%
- Functions
- 2/4
-
-
- 45.45%
- Lines
- 5/11
-
-
-
-
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-9×
-9×
-
-
-
-
-
-
-7×
-7×
-7×
-
-
- pragma solidity >=0.5.0 <0.7.0;
-
-
-/**
- * @title SafeMath
- * @dev Math operations with safety checks that throw on error
- */
-library SafeMath {
-
- /**
- * @dev Multiplies two numbers, throws on overflow.
- */
- function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
- // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
- // benefit is lost if 'b' is also tested.
- // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
- if (a == 0) {
- return 0;
- }
-
- c = a * b ;
- assert(c / a == b) ;
- return c;
- }
-
- /**
- * @dev Integer division of two numbers, truncating the quotient.
- */
- function div(uint256 a, uint256 b) internal pure returns (uint256) {
- // assert(b > 0); // Solidity automatically throws when dividing by 0
- // uint256 c = a / b;
- // assert(a == b * c + a % b); // There is no case in which this doesn't hold
- return a / b;
- }
-
- /**
- * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
- */
- function sub(uint256 a, uint256 b) internal pure returns (uint256) {
- E assert(b <= a);
- return a - b;
- }
-
- /**
- * @dev Adds two numbers, throws on overflow.
- */
- function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
- c = a + b;
- E assert(c >= a);
- return c;
- }
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/lcov-report/math/index.html b/coverage/lcov-report/math/index.html
deleted file mode 100644
index 8cdf067..0000000
--- a/coverage/lcov-report/math/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-
- Code coverage report for math/
-
-
-
-
-
-
-
-
-
-
-
-
- 45.45%
- Statements
- 5/11
-
-
- 25%
- Branches
- 2/8
-
-
- 50%
- Functions
- 2/4
-
-
- 45.45%
- Lines
- 5/11
-
-
-
-
-
-
-
-
- File
-
- Statements
-
- Branches
-
- Functions
-
- Lines
-
-
-
-
- SafeMath.sol
-
- 45.45%
- 5/11
- 25%
- 2/8
- 50%
- 2/4
- 45.45%
- 5/11
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css
deleted file mode 100644
index b317a7c..0000000
--- a/coverage/lcov-report/prettify.css
+++ /dev/null
@@ -1 +0,0 @@
-.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js
deleted file mode 100644
index ef51e03..0000000
--- a/coverage/lcov-report/prettify.js
+++ /dev/null
@@ -1 +0,0 @@
-window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^
-
-
-