diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol index bdcd35cf2268..9b2c0e4677bd 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol @@ -12,27 +12,27 @@ contract DeploymentSummary is DeploymentSummaryCode { address private constant VM_ADDRESS = address(uint160(uint256(keccak256("hevm cheat code")))); Vm private constant vm = Vm(VM_ADDRESS); - address internal constant addressManagerAddress = 0x50EEf481cae4250d252Ae577A09bF514f224C6C4; + address internal constant addressManagerAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; address internal constant l1CrossDomainMessengerAddress = 0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99; - address internal constant l1CrossDomainMessengerProxyAddress = 0xc7B87b2b892EA5C3CfF47168881FE168C00377FB; + address internal constant l1CrossDomainMessengerProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; address internal constant l1ERC721BridgeAddress = 0x44637A4292E0CD2B17A55d5F6B2F05AFcAcD0586; - address internal constant l1ERC721BridgeProxyAddress = 0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865; + address internal constant l1ERC721BridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; address internal constant l1StandardBridgeAddress = 0x04c50B398Cd4182428E79f7186b7C919cF17e86F; - address internal constant l1StandardBridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; + address internal constant l1StandardBridgeProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; address internal constant l2OutputOracleAddress = 0x19652082F846171168Daf378C4fD3ee85a0D4A60; - address internal constant l2OutputOracleProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; - address internal constant optimismPortalAddress = 0xFc9AD479AC641888D36EE5Dc265bcD3ecceBDc58; - address internal constant optimismPortalProxyAddress = 0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4; + address internal constant l2OutputOracleProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; + address internal constant optimismPortalAddress = 0x76ED1cebB4BD1b4Ec6003CBe43180fB8b6540066; + address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant protocolVersionsAddress = 0xfbfD64a6C0257F613feFCe050Aa30ecC3E3d7C3F; - address internal constant protocolVersionsProxyAddress = 0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1; - address internal constant proxyAdminAddress = 0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1; - address internal constant safeProxyFactoryAddress = 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496; - address internal constant safeSingletonAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; + address internal constant protocolVersionsProxyAddress = 0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6; + address internal constant proxyAdminAddress = 0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76; + address internal constant safeProxyFactoryAddress = 0x34A1D3fff3958843C43aD80F30b94c510645C316; + address internal constant safeSingletonAddress = 0x90193C961A926261B756D1E5bb255e67ff9498A1; address internal constant superchainConfigAddress = 0x068E44eB31e111028c41598E4535be7468674D0A; - address internal constant superchainConfigProxyAddress = 0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351; - address internal constant systemConfigAddress = 0x19E90dC1Fb905f20BB3A7eC537B5B812d5FFA682; - address internal constant systemConfigProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; - address internal constant systemOwnerSafeAddress = 0x96544c43aBcEe1c7FC04914953Bf0330e21a3c7d; + address internal constant superchainConfigProxyAddress = 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809; + address internal constant systemConfigAddress = 0xFbAd4D80032fE5aAbFed18fD14B5a822cEb0A103; + address internal constant systemConfigProxyAddress = 0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4; + address internal constant systemOwnerSafeAddress = 0x7d039be7F9b5190147621b02e82B250e1D748e02; function recreateDeployment() public { bytes32 slot; @@ -44,7 +44,7 @@ contract DeploymentSummary is DeploymentSummaryCode { vm.store(safeSingletonAddress, slot, value); vm.etch(systemOwnerSafeAddress, systemOwnerSafeCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; - value = hex"000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3"; + value = hex"00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"e90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0"; value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; @@ -70,14 +70,14 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000003"; - value = hex"00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4"; + value = hex"000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; - value = hex"00000000000000000000000096544c43abcee1c7fc04914953bf0330e21a3c7d"; + value = hex"0000000000000000000000007d039be7f9b5190147621b02e82b250e1d748e02"; vm.store(proxyAdminAddress, slot, value); vm.etch(superchainConfigProxyAddress, superchainConfigProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(superchainConfigProxyAddress, slot, value); vm.etch(superchainConfigAddress, superchainConfigCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; @@ -109,7 +109,7 @@ contract DeploymentSummary is DeploymentSummaryCode { vm.store(superchainConfigProxyAddress, slot, value); vm.etch(protocolVersionsProxyAddress, protocolVersionsProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(protocolVersionsProxyAddress, slot, value); vm.etch(protocolVersionsAddress, protocolVersionsCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; @@ -140,7 +140,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(protocolVersionsProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(protocolVersionsProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc"; @@ -150,33 +150,33 @@ contract DeploymentSummary is DeploymentSummaryCode { vm.store(protocolVersionsProxyAddress, slot, value); vm.etch(optimismPortalProxyAddress, optimismPortalProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(optimismPortalProxyAddress, slot, value); vm.etch(l2OutputOracleProxyAddress, l2OutputOracleProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(l2OutputOracleProxyAddress, slot, value); vm.etch(systemConfigProxyAddress, systemConfigProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(systemConfigProxyAddress, slot, value); vm.etch(l1StandardBridgeProxyAddress, l1StandardBridgeProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(l1StandardBridgeProxyAddress, slot, value); vm.etch(l1CrossDomainMessengerProxyAddress, l1CrossDomainMessengerProxyCode); - slot = hex"f6cecbacbfeb99e6ab0f02c22fd8a103f8837deb80af03d481ac5bc8d5475f58"; - value = hex"00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4"; + slot = hex"540cf4e2f45b866b44f44bde51e109474016dc46a0670fbe1684ad8eaf90fdc3"; + value = hex"000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); - slot = hex"ceb2ac3d439ba35adb9a3f2ba6c37d15a264e79156ee79334f5d4c00090812d2"; + slot = hex"4505be7acf20898edfef2b5289635349881ad9bf4b57316a74e81e2abec2be52"; value = hex"4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); vm.etch(l1ERC721BridgeProxyAddress, l1ERC721BridgeProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(addressManagerAddress, slot, value); vm.etch(optimismPortalAddress, optimismPortalCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; @@ -290,7 +290,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc"; @@ -314,16 +314,16 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"000000000000000000000000ff00000000000000000000000000000000000000"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580636"; - value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; + value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a7"; - value = hex"000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d5865"; + value = hex"000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6376"; - value = hex"000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f"; + value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ac"; - value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; + value = hex"000000000000000000000000978e3286eb805934215a88694d80b09aded68d90"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"a11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -337,7 +337,7 @@ contract DeploymentSummary is DeploymentSummaryCode { slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; value = hex"0000000000000000000000000000000000000000000000000000000000000004"; vm.store(systemOwnerSafeAddress, slot, value); - slot = hex"191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284"; + slot = hex"a8f0d50211ac8ff1a40793a899dff3ced4762e0466f69b0078ab7b00d037835c"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; @@ -353,13 +353,13 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000032"; - value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; + value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; + value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000003"; - value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; + value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000004"; value = hex"0000000000000000000000004200000000000000000000000000000000000010"; @@ -380,10 +380,10 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000032"; - value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; + value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000001"; - value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; + value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000002"; value = hex"0000000000000000000000004200000000000000000000000000000000000014"; @@ -394,13 +394,13 @@ contract DeploymentSummary is DeploymentSummaryCode { slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; value = hex"0000000000000000000000000000000000000000000000000000000000000007"; vm.store(systemOwnerSafeAddress, slot, value); - slot = hex"f6cecbacbfeb99e6ab0f02c22fd8a103f8837deb80af03d481ac5bc8d5475f58"; + slot = hex"540cf4e2f45b866b44f44bde51e109474016dc46a0670fbe1684ad8eaf90fdc3"; value = hex"0000000000000000000000000000000000000000000000000000000000000002"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; value = hex"0000000000000000000000000000000000000000000000000000000000000008"; vm.store(systemOwnerSafeAddress, slot, value); - slot = hex"63c92109b91ecf3318ee316da9fdb1378fd8d900f912b2029945ff91daa463bf"; + slot = hex"17eb2365d570ef4d1cc4abe9e522ed8632b11233db9c15f3c2c8aa32407b981b"; value = hex"4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; @@ -416,13 +416,13 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000001010000000000000000000000000000000000000000"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000fb"; - value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; + value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000fc"; - value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; + value = hex"000000000000000000000000978e3286eb805934215a88694d80b09aded68d90"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000fd"; - value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; + value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000cc"; value = hex"000000000000000000000000000000000000000000000000000000000000dead"; @@ -446,13 +446,13 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000036"; - value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; + value = hex"0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000037"; - value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; + value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000035"; - value = hex"00000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100"; + value = hex"0000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000032"; value = hex"000000000000000000000000000000000000000000000000000000000000dead"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol index 9cc6b94709e8..082fe7873159 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofs.sol @@ -12,35 +12,35 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { address private constant VM_ADDRESS = address(uint160(uint256(keccak256("hevm cheat code")))); Vm private constant vm = Vm(VM_ADDRESS); - address internal constant addressManagerAddress = 0x50EEf481cae4250d252Ae577A09bF514f224C6C4; - address internal constant anchorStateRegistryAddress = 0x71f44B7281dFCd25D9a36798E1872F82942DD763; - address internal constant anchorStateRegistryProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; + address internal constant addressManagerAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; + address internal constant anchorStateRegistryAddress = 0xF74482139D1564B826994875cF6632eB5b134b25; + address internal constant anchorStateRegistryProxyAddress = 0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4; address internal constant delayedWETHAddress = 0x49BBFf1629824A1e7993Ab5c17AFa45D24AB28c9; - address internal constant delayedWETHProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; + address internal constant delayedWETHProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; address internal constant disputeGameFactoryAddress = 0x20B168142354Cee65a32f6D8cf3033E592299765; - address internal constant disputeGameFactoryProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; + address internal constant disputeGameFactoryProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; address internal constant l1CrossDomainMessengerAddress = 0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99; - address internal constant l1CrossDomainMessengerProxyAddress = 0x5207CfA0166E8de0FCdFd78B4d17b68587bE306d; + address internal constant l1CrossDomainMessengerProxyAddress = 0xc7B87b2b892EA5C3CfF47168881FE168C00377FB; address internal constant l1ERC721BridgeAddress = 0x44637A4292E0CD2B17A55d5F6B2F05AFcAcD0586; - address internal constant l1ERC721BridgeProxyAddress = 0x39Af23E00F1e662025aA01b0cEdA19542B78DF99; + address internal constant l1ERC721BridgeProxyAddress = 0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865; address internal constant l1StandardBridgeAddress = 0x04c50B398Cd4182428E79f7186b7C919cF17e86F; - address internal constant l1StandardBridgeProxyAddress = 0xD31598c909d9C935a9e35bA70d9a3DD47d4D5865; + address internal constant l1StandardBridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; address internal constant mipsAddress = 0xF698388BFCDbd3f9f2F13ebC3E01471B3cc7cE83; address internal constant optimismPortal2Address = 0xfcbb237388CaF5b08175C9927a37aB6450acd535; - address internal constant optimismPortalProxyAddress = 0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4; + address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant preimageOracleAddress = 0x3bd7E801E51d48c5d94Ea68e8B801DFFC275De75; address internal constant protocolVersionsAddress = 0xfbfD64a6C0257F613feFCe050Aa30ecC3E3d7C3F; - address internal constant protocolVersionsProxyAddress = 0x4C52a6277b1B84121b3072C0c92b6Be0b7CC10F1; - address internal constant proxyAdminAddress = 0x62c20Aa1e0272312BC100b4e23B4DC1Ed96dD7D1; - address internal constant safeProxyFactoryAddress = 0xA8452Ec99ce0C64f20701dB7dD3abDb607c00496; - address internal constant safeSingletonAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; + address internal constant protocolVersionsProxyAddress = 0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6; + address internal constant proxyAdminAddress = 0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76; + address internal constant safeProxyFactoryAddress = 0x34A1D3fff3958843C43aD80F30b94c510645C316; + address internal constant safeSingletonAddress = 0x90193C961A926261B756D1E5bb255e67ff9498A1; address internal constant superchainConfigAddress = 0x068E44eB31e111028c41598E4535be7468674D0A; - address internal constant superchainConfigProxyAddress = 0x4f559F30f5eB88D635FDe1548C4267DB8FaB0351; - address internal constant systemConfigAddress = 0x19E90dC1Fb905f20BB3A7eC537B5B812d5FFA682; - address internal constant systemConfigProxyAddress = 0xc7B87b2b892EA5C3CfF47168881FE168C00377FB; - address internal constant systemOwnerSafeAddress = 0x96544c43aBcEe1c7FC04914953Bf0330e21a3c7d; - address internal constant acc27Address = 0x2abb7CBB720020ee3C9ecf3915D14B6d1886A577; - address internal constant acc28Address = 0x91752891a019Fb365Df0F99Fa468Bf19F91C2Ac0; + address internal constant superchainConfigProxyAddress = 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809; + address internal constant systemConfigAddress = 0xFbAd4D80032fE5aAbFed18fD14B5a822cEb0A103; + address internal constant systemConfigProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; + address internal constant systemOwnerSafeAddress = 0x7d039be7F9b5190147621b02e82B250e1D748e02; + address internal constant acc27Address = 0x12e721c390F5728200a26BBEf206A5F4F7E991f3; + address internal constant acc28Address = 0x2abb7CBB720020ee3C9ecf3915D14B6d1886A577; function recreateDeployment() public { bytes32 slot; @@ -52,7 +52,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { vm.store(safeSingletonAddress, slot, value); vm.etch(systemOwnerSafeAddress, systemOwnerSafeCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; - value = hex"000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3"; + value = hex"00000000000000000000000090193c961a926261b756d1e5bb255e67ff9498a1"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"e90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0"; value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; @@ -78,14 +78,14 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000003"; - value = hex"00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4"; + value = hex"000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; - value = hex"00000000000000000000000096544c43abcee1c7fc04914953bf0330e21a3c7d"; + value = hex"0000000000000000000000007d039be7f9b5190147621b02e82b250e1d748e02"; vm.store(proxyAdminAddress, slot, value); vm.etch(superchainConfigProxyAddress, superchainConfigProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(superchainConfigProxyAddress, slot, value); vm.etch(superchainConfigAddress, superchainConfigCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; @@ -117,7 +117,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { vm.store(superchainConfigProxyAddress, slot, value); vm.etch(protocolVersionsProxyAddress, protocolVersionsProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(protocolVersionsProxyAddress, slot, value); vm.etch(protocolVersionsAddress, protocolVersionsCode); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; @@ -148,7 +148,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(protocolVersionsProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(protocolVersionsProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc"; @@ -158,41 +158,41 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { vm.store(protocolVersionsProxyAddress, slot, value); vm.etch(optimismPortalProxyAddress, optimismPortalProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(optimismPortalProxyAddress, slot, value); vm.etch(disputeGameFactoryProxyAddress, disputeGameFactoryProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(disputeGameFactoryProxyAddress, slot, value); vm.etch(anchorStateRegistryProxyAddress, anchorStateRegistryProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(anchorStateRegistryProxyAddress, slot, value); vm.etch(delayedWETHProxyAddress, delayedWETHProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(delayedWETHProxyAddress, slot, value); vm.etch(systemConfigProxyAddress, systemConfigProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(systemConfigProxyAddress, slot, value); vm.etch(l1StandardBridgeProxyAddress, l1StandardBridgeProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(l1StandardBridgeProxyAddress, slot, value); vm.etch(l1CrossDomainMessengerProxyAddress, l1CrossDomainMessengerProxyCode); - slot = hex"67ba7d8bdda390f76c7887f0749c8ddd97a5488c0685a6600f6146d45a37e9e3"; - value = hex"00000000000000000000000050eef481cae4250d252ae577a09bf514f224c6c4"; + slot = hex"f6cecbacbfeb99e6ab0f02c22fd8a103f8837deb80af03d481ac5bc8d5475f58"; + value = hex"000000000000000000000000bb2180ebd78ce97360503434ed37fcf4a1df61c3"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); - slot = hex"d99a7cb5c85ff45a31aa0b5f37f50c1e3e0ba7b502eb0a97c078a396df6e5fc4"; + slot = hex"ceb2ac3d439ba35adb9a3f2ba6c37d15a264e79156ee79334f5d4c00090812d2"; value = hex"4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); vm.etch(l1ERC721BridgeProxyAddress, l1ERC721BridgeProxyCode); slot = hex"b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(addressManagerAddress, slot, value); vm.etch(optimismPortal2Address, optimismPortal2Code); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; @@ -373,7 +373,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000003"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"00000000000000000000000019e90dc1fb905f20bb3a7ec537b5b812d5ffa682"; + value = hex"000000000000000000000000fbad4d80032fe5aabfed18fd14b5a822ceb0a103"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -382,7 +382,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc"; @@ -406,19 +406,19 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"000000000000000000000000ff00000000000000000000000000000000000000"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580636"; - value = hex"0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d"; + value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a7"; - value = hex"00000000000000000000000039af23e00f1e662025aa01b0ceda19542b78df99"; + value = hex"000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d5865"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6376"; - value = hex"000000000000000000000000d31598c909d9c935a9e35ba70d9a3dd47d4d5865"; + value = hex"000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa906"; - value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; + value = hex"0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ac"; - value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; + value = hex"000000000000000000000000978e3286eb805934215a88694d80b09aded68d90"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"a11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -432,7 +432,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; value = hex"0000000000000000000000000000000000000000000000000000000000000004"; vm.store(systemOwnerSafeAddress, slot, value); - slot = hex"9ab6929e7d0104b9744ecf48c9c83f65e34bb9eb80c70a88b6b8885e3bf62b15"; + slot = hex"191cda7b5a8219e0cc3bb6c2b45be830e3ba520f78e119446a476c4147fcc284"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; @@ -448,13 +448,13 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000032"; - value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; + value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; + value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000003"; - value = hex"0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d"; + value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000004"; value = hex"0000000000000000000000004200000000000000000000000000000000000010"; @@ -475,10 +475,10 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000032"; - value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; + value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000001"; - value = hex"0000000000000000000000005207cfa0166e8de0fcdfd78b4d17b68587be306d"; + value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; vm.store(l1ERC721BridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000002"; value = hex"0000000000000000000000004200000000000000000000000000000000000014"; @@ -489,13 +489,13 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; value = hex"0000000000000000000000000000000000000000000000000000000000000007"; vm.store(systemOwnerSafeAddress, slot, value); - slot = hex"67ba7d8bdda390f76c7887f0749c8ddd97a5488c0685a6600f6146d45a37e9e3"; + slot = hex"f6cecbacbfeb99e6ab0f02c22fd8a103f8837deb80af03d481ac5bc8d5475f58"; value = hex"0000000000000000000000000000000000000000000000000000000000000002"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; value = hex"0000000000000000000000000000000000000000000000000000000000000008"; vm.store(systemOwnerSafeAddress, slot, value); - slot = hex"d5dc64acc11f1f6863a0fcd1f905ec35afa9f95985626daaa4d59a538a25a7a8"; + slot = hex"63c92109b91ecf3318ee316da9fdb1378fd8d900f912b2029945ff91daa463bf"; value = hex"4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000034"; vm.store(proxyAdminAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000005"; @@ -511,13 +511,13 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000001010000000000000000000000000000000000000000"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000fb"; - value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; + value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000fc"; - value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; + value = hex"000000000000000000000000978e3286eb805934215a88694d80b09aded68d90"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000fd"; - value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; + value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000cc"; value = hex"000000000000000000000000000000000000000000000000000000000000dead"; @@ -541,7 +541,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(disputeGameFactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(disputeGameFactoryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; @@ -562,13 +562,13 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(delayedWETHProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; - value = hex"00000000000000000000000062c20aa1e0272312bc100b4e23b4dc1ed96dd7d1"; + value = hex"000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c76"; vm.store(delayedWETHProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; value = hex"0000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f38"; vm.store(delayedWETHProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000068"; - value = hex"0000000000000000000000004f559f30f5eb88d635fde1548c4267db8fab0351"; + value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; vm.store(delayedWETHProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -577,7 +577,7 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"000000000000000000000000000000000000000000000000000000000000000c"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"00000000000000000000000071f44b7281dfcd25d9a36798e1872f82942dd763"; + value = hex"000000000000000000000000f74482139d1564b826994875cf6632eb5b134b25"; vm.store(anchorStateRegistryProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -613,13 +613,13 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { value = hex"0000000000000000000000000000000000000000000000000000000000000101"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000038"; - value = hex"0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6"; + value = hex"0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000037"; - value = hex"000000000000000000000000c7b87b2b892ea5c3cff47168881fe168c00377fb"; + value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000035"; - value = hex"00000000000000000000004f559f30f5eb88d635fde1548c4267db8fab035100"; + value = hex"0000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000032"; value = hex"000000000000000000000000000000000000000000000000000000000000dead"; @@ -635,11 +635,11 @@ contract DeploymentSummaryFaultProofs is DeploymentSummaryFaultProofsCode { vm.store(optimismPortalProxyAddress, slot, value); vm.etch(acc27Address, acc27Code); slot = hex"ffdfc1249c027f9191656349feb0761381bb32c9f557e01f419fd08754bf5a1b"; - value = hex"0000000000000000000000002abb7cbb720020ee3c9ecf3915d14b6d1886a577"; + value = hex"00000000000000000000000012e721c390f5728200a26bbef206a5f4f7e991f3"; vm.store(disputeGameFactoryProxyAddress, slot, value); vm.etch(acc28Address, acc28Code); slot = hex"4d5a9bd2e41301728d41c8e705190becb4e74abe869f75bdb405b63716a35f9e"; - value = hex"00000000000000000000000091752891a019fb365df0f99fa468bf19f91c2ac0"; + value = hex"0000000000000000000000002abb7cbb720020ee3c9ecf3915d14b6d1886a577"; vm.store(disputeGameFactoryProxyAddress, slot, value); } } diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol index 5dbbc9186516..7504b87438cb 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryFaultProofsCode.sol @@ -43,7 +43,7 @@ contract DeploymentSummaryFaultProofsCode { bytes internal constant l1CrossDomainMessengerCode = hex"60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a"; bytes internal constant systemConfigCode = - hex"608060405234801561001057600080fd5b50600436106102ad5760003560e01c8063935f029e1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610654578063fd32aa0f1461065c578063ffa1ad741461066457600080fd5b8063f45e65d814610637578063f68016b71461064057600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610613578063f2b4e6171461061c578063f2fde38b1461062457600080fd5b8063e0e2016d14610603578063e2a3285c1461060b57600080fd5b8063c4e8ddfa1161012f578063cc731b0211610114578063cc731b02146104bf578063d8444715146105f3578063dac6e63a146105fb57600080fd5b8063c4e8ddfa146104a4578063c9b26f61146104ac57600080fd5b8063a711986911610160578063a711986914610481578063b40a817c14610489578063bc49ce5f1461049c57600080fd5b8063935f029e146104665780639b7d7f0a1461047957600080fd5b80634397dfef1161022957806354fd4d50116101dd5780635d73369c116101c25780635d73369c14610438578063715018a6146104405780638da5cb5b1461044857600080fd5b806354fd4d50146103e7578063550fcdc91461043057600080fd5b80634add321d1161020e5780634add321d146103a55780634c1e843d146103ad5780634f16540b146103c057600080fd5b80634397dfef1461036757806348cd4cb11461039d57600080fd5b80630c18c1621161028057806319f5cea81161026557806319f5cea81461033f5780631fd19ee114610347578063213268491461034f57600080fd5b80630c18c1621461032157806318d139181461032a57600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630ae14b1b14610302575b600080fd5b6102ba61066c565b6040519081526020015b60405180910390f35b6102d561069a565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106d3565b630bebc2005b60405167ffffffffffffffff90911681526020016102c4565b6102ba60655481565b61033d61033836600461201e565b610703565b005b6102ba610717565b6102d5610742565b61035761076c565b60405190151581526020016102c4565b61036f6107ab565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107bf565b6103086107ef565b61033d6103bb366004612186565b610815565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6104236040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102c49190612341565b610423610c20565b6102ba610c2a565b61033d610c55565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61033d610474366004612354565b610c69565b6102d5610c7f565b6102d5610caf565b61033d610497366004612376565b610cdf565b6102ba610cf0565b6102d5610d1b565b61033d6104ba366004612391565b610d4b565b6105836040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b610423610d5c565b6102d5610d66565b6102ba610d96565b6102ba610dc1565b6102ba60675481565b6102d5610dec565b61033d61063236600461201e565b610e1c565b6102ba60665481565b6068546103089067ffffffffffffffff1681565b6102ba610ed0565b6102ba610efb565b6102ba600081565b61069760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123d9565b81565b60006106ce6106ca60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123d9565b5490565b905090565b60006106ce6106ca60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123d9565b61070b611161565b610714816111e2565b50565b61069760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123d9565b60006106ce7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107776107ab565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107b66110e4565b90939092509050565b60006106ce6106ca60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123d9565b6069546000906106ce9063ffffffff6a01000000000000000000008204811691166123f0565b600054610100900460ff16158080156108355750600054600160ff909116105b8061084f5750303b15801561084f575060005460ff166001145b6108e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561093e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61094661129f565b61094f8a610e1c565b6109588761133e565b6109628989611366565b61096b866113f7565b6109947f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109c76109c260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123d9565b849055565b6109fb6109f560017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123d9565b83519055565b610a32610a2960017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123d9565b60208401519055565b610a69610a6060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123d9565b60408401519055565b610aa0610a9760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123d9565b60608401519055565b610ad7610ace60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123d9565b60808401519055565b610b0e610b0560017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123d9565b60a08401519055565b610b1661154d565b610b238260c001516115b5565b610b2c846118bf565b610b346107ef565b67ffffffffffffffff168667ffffffffffffffff161015610bb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108d7565b8015610c1457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106ce611d33565b61069760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123d9565b610c5d611161565b610c676000611df4565b565b610c71611161565b610c7b8282611366565b5050565b60006106ce6106ca60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123d9565b60006106ce6106ca60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123d9565b610ce7611161565b610714816113f7565b61069760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123d9565b60006106ce6106ca60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123d9565b610d53611161565b6107148161133e565b60606106ce611e6b565b60006106ce6106ca60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123d9565b61069760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123d9565b61069760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123d9565b60006106ce6106ca60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123d9565b610e24611161565b73ffffffffffffffffffffffffffffffffffffffff8116610ec7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d7565b61071481611df4565b61069760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123d9565b61069760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123d9565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610fda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108d7565b610fe3826110bb565b92915050565b61104f61101760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123d9565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61108261107d60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123d9565b839055565b6110b56110b060017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123d9565b829055565b50505050565b8051602181106110d35763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111166106ca60017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123d9565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611155575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d7565b61120b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112939190612341565b60405180910390a35050565b600054610100900460ff16611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d7565b610c67611f21565b6067819055604080516020808201849052825180830390910181529082019091526000611262565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516113ea9190612341565b60405180910390a3505050565b6113ff6107ef565b67ffffffffffffffff168167ffffffffffffffff16101561147c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108d7565b630bebc20067ffffffffffffffff821611156114f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016108d7565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611262565b61157b6106ca60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123d9565b600003610c6757610c676115b060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123d9565b439055565b73ffffffffffffffffffffffffffffffffffffffff811615801590611604575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b8015611615575061161361076c565b155b1561071457601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168e919061241c565b60ff161461171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108d7565b60006117b98273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561176e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526117b49190810190612439565b610f46565b9050600061180b8373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561176e573d6000803e3d6000fd5b905061181a8360128484610fe9565b6118226106d3565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b1580156118a257600080fd5b505af11580156118b6573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff16111561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108d7565b6001816040015160ff1611611a06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108d7565b6068546080820151825167ffffffffffffffff90921691611a279190612504565b63ffffffff161115611a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108d7565b6000816020015160ff1611611b2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108d7565b8051602082015163ffffffff82169160ff90911690611b4c908290612523565b611b56919061256d565b63ffffffff1614611be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108d7565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611d3f6110e4565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611db857505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611dee611de96106ca60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123d9565b611fc1565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e776110e4565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ef057505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611dee611de96106ca60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123d9565b600054610100900460ff16611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d7565b610c6733611df4565b60405160005b82811a15611fd757600101611fc7565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461201957600080fd5b919050565b60006020828403121561203057600080fd5b61203982611ff5565b9392505050565b803567ffffffffffffffff8116811461201957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156120aa576120aa612058565b60405290565b803563ffffffff8116811461201957600080fd5b60ff8116811461071457600080fd5b600060e082840312156120e557600080fd5b60405160e0810181811067ffffffffffffffff8211171561210857612108612058565b60405290508061211783611ff5565b815261212560208401611ff5565b602082015261213660408401611ff5565b604082015261214760608401611ff5565b606082015261215860808401611ff5565b608082015261216960a08401611ff5565b60a082015261217a60c08401611ff5565b60c08201525092915050565b6000806000806000806000806000898b036102808112156121a657600080fd5b6121af8b611ff5565b995060208b0135985060408b0135975060608b013596506121d260808c01612040565b95506121e060a08c01611ff5565b945060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408201121561221257600080fd5b5061221b612087565b61222760c08c016120b0565b815260e08b0135612237816120c4565b60208201526101008b013561224b816120c4565b604082015261225d6101208c016120b0565b606082015261226f6101408c016120b0565b60808201526101608b01356fffffffffffffffffffffffffffffffff8116811461229857600080fd5b60a082015292506122ac6101808b01611ff5565b91506122bc8b6101a08c016120d3565b90509295985092959850929598565b60005b838110156122e65781810151838201526020016122ce565b838111156110b55750506000910152565b6000815180845261230f8160208601602086016122cb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061203960208301846122f7565b6000806040838503121561236757600080fd5b50508035926020909101359150565b60006020828403121561238857600080fd5b61203982612040565b6000602082840312156123a357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123eb576123eb6123aa565b500390565b600067ffffffffffffffff808316818516808303821115612413576124136123aa565b01949350505050565b60006020828403121561242e57600080fd5b8151612039816120c4565b60006020828403121561244b57600080fd5b815167ffffffffffffffff8082111561246357600080fd5b818401915084601f83011261247757600080fd5b81518181111561248957612489612058565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156124cf576124cf612058565b816040528281528760208487010111156124e857600080fd5b6124f98360208301602088016122cb565b979650505050505050565b600063ffffffff808316818516808303821115612413576124136123aa565b600063ffffffff80841680612561577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612590576125906123aa565b0294935050505056fea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b50600436106102ad5760003560e01c8063935f029e1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de01461064d578063fd32aa0f14610655578063ffa1ad741461065d57600080fd5b8063f45e65d814610630578063f68016b71461063957600080fd5b8063e81b2c6d116100bd578063e81b2c6d1461060c578063f2b4e61714610615578063f2fde38b1461061d57600080fd5b8063e0e2016d146105fc578063e2a3285c1461060457600080fd5b8063c4e8ddfa1161012f578063cc731b0211610114578063cc731b02146104b8578063d8444715146105ec578063dac6e63a146105f457600080fd5b8063c4e8ddfa1461049d578063c9b26f61146104a557600080fd5b8063a711986911610160578063a71198691461047a578063b40a817c14610482578063bc49ce5f1461049557600080fd5b8063935f029e1461045f5780639b7d7f0a1461047257600080fd5b80634397dfef1161022957806354fd4d50116101dd5780635d73369c116101c25780635d73369c14610431578063715018a6146104395780638da5cb5b1461044157600080fd5b806354fd4d50146103e7578063550fcdc91461042957600080fd5b80634add321d1161020e5780634add321d146103a55780634c1e843d146103ad5780634f16540b146103c057600080fd5b80634397dfef1461036757806348cd4cb11461039d57600080fd5b80630c18c1621161028057806319f5cea81161026557806319f5cea81461033f5780631fd19ee114610347578063213268491461034f57600080fd5b80630c18c1621461032157806318d139181461032a57600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630ae14b1b14610302575b600080fd5b6102ba610665565b6040519081526020015b60405180910390f35b6102d5610693565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106cc565b630bebc2005b60405167ffffffffffffffff90911681526020016102c4565b6102ba60655481565b61033d610338366004612017565b6106fc565b005b6102ba610710565b6102d561073b565b610357610765565b60405190151581526020016102c4565b61036f6107a4565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107b8565b6103086107e8565b61033d6103bb36600461217f565b61080e565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b60408051808201909152600581527f322e332e3000000000000000000000000000000000000000000000000000000060208201525b6040516102c4919061233a565b61041c610c19565b6102ba610c23565b61033d610c4e565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61033d61046d36600461234d565b610c62565b6102d5610c78565b6102d5610ca8565b61033d61049036600461236f565b610cd8565b6102ba610ce9565b6102d5610d14565b61033d6104b336600461238a565b610d44565b61057c6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041c610d55565b6102d5610d5f565b6102ba610d8f565b6102ba610dba565b6102ba60675481565b6102d5610de5565b61033d61062b366004612017565b610e15565b6102ba60665481565b6068546103089067ffffffffffffffff1681565b6102ba610ec9565b6102ba610ef4565b6102ba600081565b61069060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123d2565b81565b60006106c76106c360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123d2565b5490565b905090565b60006106c76106c360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123d2565b61070461115a565b61070d816111db565b50565b61069060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123d2565b60006106c77f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107706107a4565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107af6110dd565b90939092509050565b60006106c76106c360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123d2565b6069546000906106c79063ffffffff6a01000000000000000000008204811691166123e9565b600054610100900460ff161580801561082e5750600054600160ff909116105b806108485750303b158015610848575060005460ff166001145b6108d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561093757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61093f611298565b6109488a610e15565b61095187611337565b61095b898961135f565b610964866113f0565b61098d7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109c06109bb60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123d2565b849055565b6109f46109ee60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123d2565b83519055565b610a2b610a2260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123d2565b60208401519055565b610a62610a5960017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123d2565b60408401519055565b610a99610a9060017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123d2565b60608401519055565b610ad0610ac760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123d2565b60808401519055565b610b07610afe60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123d2565b60a08401519055565b610b0f611546565b610b1c8260c001516115ae565b610b25846118b8565b610b2d6107e8565b67ffffffffffffffff168667ffffffffffffffff161015610baa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108d0565b8015610c0d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106c7611d2c565b61069060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123d2565b610c5661115a565b610c606000611ded565b565b610c6a61115a565b610c74828261135f565b5050565b60006106c76106c360017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123d2565b60006106c76106c360017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123d2565b610ce061115a565b61070d816113f0565b61069060017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123d2565b60006106c76106c360017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123d2565b610d4c61115a565b61070d81611337565b60606106c7611e64565b60006106c76106c360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123d2565b61069060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123d2565b61069060017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123d2565b60006106c76106c360017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123d2565b610e1d61115a565b73ffffffffffffffffffffffffffffffffffffffff8116610ec0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108d0565b61070d81611ded565b61069060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123d2565b61069060017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123d2565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108d0565b610fdc826110b4565b92915050565b61104861101060017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123d2565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61107b61107660017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123d2565b839055565b6110ae6110a960017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123d2565b829055565b50505050565b8051602181106110cc5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b6000808061110f6106c360017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123d2565b73ffffffffffffffffffffffffffffffffffffffff8116935090508261114e575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108d0565b6112047f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161128c919061233a565b60405180910390a35050565b600054610100900460ff1661132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b610c60611f1a565b606781905560408051602080820184905282518083039091018152908201909152600061125b565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516113e3919061233a565b60405180910390a3505050565b6113f86107e8565b67ffffffffffffffff168167ffffffffffffffff161015611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108d0565b630bebc20067ffffffffffffffff821611156114ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016108d0565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8316908117909155604080516020808201939093528151808203909301835281019052600261125b565b6115746106c360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123d2565b600003610c6057610c606115a960017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123d2565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115fd575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b801561160e575061160c610765565b155b1561070d57601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116879190612415565b60ff1614611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108d0565b60006117b28273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611767573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526117ad9190810190612432565b610f3f565b905060006118048373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611767573d6000803e3d6000fd5b90506118138360128484610fe2565b61181b6106cc565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561189b57600080fd5b505af11580156118af573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108d0565b6001816040015160ff16116119ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108d0565b6068546080820151825167ffffffffffffffff90921691611a2091906124fd565b63ffffffff161115611a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108d0565b6000816020015160ff1611611b25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108d0565b8051602082015163ffffffff82169160ff90911690611b4590829061251c565b611b4f9190612566565b63ffffffff1614611be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108d0565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611d386110dd565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611db157505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611de7611de26106c360017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123d2565b611fba565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e706110dd565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ee957505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611de7611de26106c360017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123d2565b600054610100900460ff16611fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108d0565b610c6033611ded565b60405160005b82811a15611fd057600101611fc0565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461201257600080fd5b919050565b60006020828403121561202957600080fd5b61203282611fee565b9392505050565b803567ffffffffffffffff8116811461201257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156120a3576120a3612051565b60405290565b803563ffffffff8116811461201257600080fd5b60ff8116811461070d57600080fd5b600060e082840312156120de57600080fd5b60405160e0810181811067ffffffffffffffff8211171561210157612101612051565b60405290508061211083611fee565b815261211e60208401611fee565b602082015261212f60408401611fee565b604082015261214060608401611fee565b606082015261215160808401611fee565b608082015261216260a08401611fee565b60a082015261217360c08401611fee565b60c08201525092915050565b6000806000806000806000806000898b0361028081121561219f57600080fd5b6121a88b611fee565b995060208b0135985060408b0135975060608b013596506121cb60808c01612039565b95506121d960a08c01611fee565b945060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408201121561220b57600080fd5b50612214612080565b61222060c08c016120a9565b815260e08b0135612230816120bd565b60208201526101008b0135612244816120bd565b60408201526122566101208c016120a9565b60608201526122686101408c016120a9565b60808201526101608b01356fffffffffffffffffffffffffffffffff8116811461229157600080fd5b60a082015292506122a56101808b01611fee565b91506122b58b6101a08c016120cc565b90509295985092959850929598565b60005b838110156122df5781810151838201526020016122c7565b838111156110ae5750506000910152565b600081518084526123088160208601602086016122c4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061203260208301846122f0565b6000806040838503121561236057600080fd5b50508035926020909101359150565b60006020828403121561238157600080fd5b61203282612039565b60006020828403121561239c57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123e4576123e46123a3565b500390565b600067ffffffffffffffff80831681851680830382111561240c5761240c6123a3565b01949350505050565b60006020828403121561242757600080fd5b8151612032816120bd565b60006020828403121561244457600080fd5b815167ffffffffffffffff8082111561245c57600080fd5b818401915084601f83011261247057600080fd5b81518181111561248257612482612051565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156124c8576124c8612051565b816040528281528760208487010111156124e157600080fd5b6124f28360208301602088016122c4565b979650505050505050565b600063ffffffff80831681851680830382111561240c5761240c6123a3565b600063ffffffff8084168061255a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612589576125896123a3565b0294935050505056fea164736f6c634300080f000a"; bytes internal constant l1StandardBridgeCode = hex"6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612993565b6105b8565b61023b610270366004612a44565b6109d2565b61023b610283366004612a97565b610aa9565b61023b610296366004612a97565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612b0a565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612bf7565b3480156103ce57600080fd5b5061023b6103dd366004612c0a565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612b0a565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612c0a565b611212565b34801561047e57600080fd5b506104aa61048d366004612c8d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612cc6565b6112e6565b34801561050257600080fd5b5061023b610511366004612993565b611328565b61023b610524366004612a44565b611337565b34801561053557600080fd5b5061023b610544366004612d29565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612cc6565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612dc0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201292505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612dd7565b905090565b6109c987873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201292505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010612021565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461210b565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612df9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612e42565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b630000000000000000000000000000000000000000000000000000000061217e565b806119055750611905827fec4fc8e30000000000000000000000000000000000000000000000000000000061217e565b92915050565b6000611937837f1d1d8b630000000000000000000000000000000000000000000000000000000061217e565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612d74565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526121a1565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612e87565b60405180910390a46110138686868686866122ad565b600080611b98612335565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612ec5565b60405180910390a36105b2848484846123d2565b600080600080845160208601878a8af19695505050505050565b3415611ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5374616e646172644272696467653a2063616e6e6f742073656e642076616c7560448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610214565b611cf0876118a9565b15611e3e57611cff878761190b565b611db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e2157600080fd5b505af1158015611e35573d6000803e3d6000fd5b50505050611ed2565b611e6073ffffffffffffffffffffffffffffffffffffffff881686308661243f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e9e908490612ede565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611ee087878787878661249d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611f44908b908d908c908c908c908b90602401612ef6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611fd792918790600401612e42565b600060405180830381600087803b158015611ff157600080fd5b505af1158015612005573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff166120b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161216a929190612ec5565b60405180910390a36105b28484848461252b565b60006121898361258a565b801561219a575061219a83836125ee565b9392505050565b6000612203826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126bd9092919063ffffffff16565b805190915015610aa457808060200190518101906122219190612dd7565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161232593929190612e87565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156123a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c99190612f51565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612431929190612ec5565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161251593929190612e87565b60405180910390a46110138686868686866126d4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612431929190612ec5565b60006125b6827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ee565b801561190557506125e7827fffffffff000000000000000000000000000000000000000000000000000000006125ee565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156126a6575060208210155b80156126b25750600081115b979650505050505050565b60606126cc848460008561274c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161232593929190612e87565b6060824710156127de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b61285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128859190612f86565b60006040518083038185875af1925050503d80600081146128c2576040519150601f19603f3d011682016040523d82523d6000602084013e6128c7565b606091505b50915091506126b2828286606083156128e157508161219a565b8251156128f15782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612bf7565b73ffffffffffffffffffffffffffffffffffffffff8116811461294757600080fd5b50565b60008083601f84011261295c57600080fd5b50813567ffffffffffffffff81111561297457600080fd5b60208301915083602082850101111561298c57600080fd5b9250929050565b600080600080600080600060c0888a0312156129ae57600080fd5b87356129b981612925565b965060208801356129c981612925565b955060408801356129d981612925565b945060608801356129e981612925565b93506080880135925060a088013567ffffffffffffffff811115612a0c57600080fd5b612a188a828b0161294a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a3f57600080fd5b919050565b600080600060408486031215612a5957600080fd5b612a6284612a2b565b9250602084013567ffffffffffffffff811115612a7e57600080fd5b612a8a8682870161294a565b9497909650939450505050565b600080600080600060808688031215612aaf57600080fd5b8535612aba81612925565b94506020860135612aca81612925565b935060408601359250606086013567ffffffffffffffff811115612aed57600080fd5b612af98882890161294a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b2557600080fd5b8735612b3081612925565b96506020880135612b4081612925565b95506040880135612b5081612925565b945060608801359350612b6560808901612a2b565b925060a088013567ffffffffffffffff811115612a0c57600080fd5b60005b83811015612b9c578181015183820152602001612b84565b838111156105b25750506000910152565b60008151808452612bc5816020860160208601612b81565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061219a6020830184612bad565b60008060008060008060a08789031215612c2357600080fd5b8635612c2e81612925565b95506020870135612c3e81612925565b945060408701359350612c5360608801612a2b565b9250608087013567ffffffffffffffff811115612c6f57600080fd5b612c7b89828a0161294a565b979a9699509497509295939492505050565b60008060408385031215612ca057600080fd5b8235612cab81612925565b91506020830135612cbb81612925565b809150509250929050565b60008060008060608587031215612cdc57600080fd5b8435612ce781612925565b9350612cf560208601612a2b565b9250604085013567ffffffffffffffff811115612d1157600080fd5b612d1d8782880161294a565b95989497509550505050565b600080600060608486031215612d3e57600080fd5b8335612d4981612925565b92506020840135612d5981612925565b91506040840135612d6981612925565b809150509250925092565b600060208284031215612d8657600080fd5b815161219a81612925565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612dd257612dd2612d91565b500390565b600060208284031215612de957600080fd5b8151801515811461219a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e386080830184612bad565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e716060830185612bad565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ebc6060830184612bad565b95945050505050565b8281526040602082015260006126cc6040830184612bad565b60008219821115612ef157612ef1612d91565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f4560c0830184612bad565b98975050505050505050565b60008060408385031215612f6457600080fd5b8251612f6f81612925565b602084015190925060ff81168114612cbb57600080fd5b60008251612f98818460208701612b81565b919091019291505056fea164736f6c634300080f000a"; bytes internal constant l1ERC721BridgeCode = @@ -57,9 +57,9 @@ contract DeploymentSummaryFaultProofsCode { bytes internal constant mipsCode = hex"608060405234801561001057600080fd5b506004361061004c5760003560e01c8063155633fe1461005157806354fd4d50146100765780637dc0d1d0146100bf578063e14ced3214610103575b600080fd5b61005c634000000081565b60405163ffffffff90911681526020015b60405180910390f35b6100b26040518060400160405280600581526020017f312e302e3100000000000000000000000000000000000000000000000000000081525081565b60405161006d9190611e16565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de7516815260200161006d565b610116610111366004611ed2565b610124565b60405190815260200161006d565b600061012e611d8c565b6080811461013b57600080fd5b6040516106001461014b57600080fd5b6084871461015857600080fd5b6101a4851461016657600080fd5b8635608052602087013560a052604087013560e090811c60c09081526044890135821c82526048890135821c61010052604c890135821c610120526050890135821c61014052605489013590911c61016052605888013560f890811c610180526059890135901c6101a052605a880135901c6101c0526102006101e0819052606288019060005b602081101561021157823560e01c82526004909201916020909101906001016101ed565b5050508061012001511561022f5761022761066f565b915050610666565b6101408101805160010167ffffffffffffffff1690526060810151600090610257908261078b565b9050603f601a82901c16600281148061027657508063ffffffff166003145b156102cb5760006002836303ffffff1663ffffffff16901b846080015163f0000000161790506102c08263ffffffff166002146102b457601f6102b7565b60005b60ff1682610847565b945050505050610666565b6101608301516000908190601f601086901c81169190601587901c16602081106102f7576102f7611f46565b602002015192508063ffffffff8516158061031857508463ffffffff16601c145b1561034f578661016001518263ffffffff166020811061033a5761033a611f46565b6020020151925050601f600b86901c1661040b565b60208563ffffffff1610156103b1578463ffffffff16600c148061037957508463ffffffff16600d145b8061038a57508463ffffffff16600e145b1561039b578561ffff16925061040b565b6103aa8661ffff166010610938565b925061040b565b60288563ffffffff161015806103cd57508463ffffffff166022145b806103de57508463ffffffff166026145b1561040b578661016001518263ffffffff166020811061040057610400611f46565b602002015192508190505b60048563ffffffff1610158015610428575060088563ffffffff16105b8061043957508463ffffffff166001145b156104585761044a858784876109ab565b975050505050505050610666565b63ffffffff60006020878316106104bd576104788861ffff166010610938565b9095019463fffffffc861661048e81600161078b565b915060288863ffffffff16101580156104ae57508763ffffffff16603014155b156104bb57809250600093505b505b60006104cb89888885610bbb565b63ffffffff9081169150603f8a169089161580156104f0575060088163ffffffff1610155b80156105025750601c8163ffffffff16105b156105df578063ffffffff166008148061052257508063ffffffff166009145b15610559576105478163ffffffff1660081461053e5785610541565b60005b89610847565b9b505050505050505050505050610666565b8063ffffffff16600a0361057957610547858963ffffffff8a161561134b565b8063ffffffff16600b0361059a57610547858963ffffffff8a16151561134b565b8063ffffffff16600c036105b1576105478d611431565b60108163ffffffff16101580156105ce5750601c8163ffffffff16105b156105df5761054781898988611968565b8863ffffffff1660381480156105fa575063ffffffff861615155b1561062f5760018b61016001518763ffffffff166020811061061e5761061e611f46565b63ffffffff90921660209290920201525b8363ffffffff1663ffffffff1461064c5761064c84600184611c3f565b6106588583600161134b565b9b5050505050505050505050505b95945050505050565b60408051608051815260a051602082015260dc519181019190915260fc51604482015261011c51604882015261013c51604c82015261015c51605082015261017c5160548201526101805161019f5160588301526101a0516101bf5160598401526101d851605a840152600092610200929091606283019190855b602081101561070e57601c86015184526020909501946004909301926001016106ea565b506000835283830384a060009450806001811461072e5760039550610756565b828015610746576001811461074f5760029650610754565b60009650610754565b600196505b505b50505081900390207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660f89190911b17919050565b60008061079783611ce3565b905060038416156107a757600080fd5b6020810190358460051c8160005b601b81101561080d5760208501943583821c60011680156107dd57600181146107f257610803565b60008481526020839052604090209350610803565b600082815260208590526040902093505b50506001016107b5565b50608051915081811461082857630badf00d60005260206000fd5b5050601f94909416601c0360031b9390931c63ffffffff169392505050565b6000610851611d8c565b60809050806060015160040163ffffffff16816080015163ffffffff16146108da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6a756d7020696e2064656c617920736c6f74000000000000000000000000000060448201526064015b60405180910390fd5b60608101805160808301805163ffffffff90811690935285831690529085161561093057806008018261016001518663ffffffff166020811061091f5761091f611f46565b63ffffffff90921660209290920201525b61066661066f565b600063ffffffff8381167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80850183169190911c821615159160016020869003821681901b830191861691821b92911b0182610995576000610997565b815b90861663ffffffff16179250505092915050565b60006109b5611d8c565b608090506000816060015160040163ffffffff16826080015163ffffffff1614610a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6272616e636820696e2064656c617920736c6f7400000000000000000000000060448201526064016108d1565b8663ffffffff1660041480610a5657508663ffffffff166005145b15610ad25760008261016001518663ffffffff1660208110610a7a57610a7a611f46565b602002015190508063ffffffff168563ffffffff16148015610aa257508763ffffffff166004145b80610aca57508063ffffffff168563ffffffff1614158015610aca57508763ffffffff166005145b915050610b4f565b8663ffffffff16600603610aef5760008460030b13159050610b4f565b8663ffffffff16600703610b0b5760008460030b139050610b4f565b8663ffffffff16600103610b4f57601f601087901c166000819003610b345760008560030b1291505b8063ffffffff16600103610b4d5760008560030b121591505b505b606082018051608084015163ffffffff169091528115610b95576002610b7a8861ffff166010610938565b63ffffffff90811690911b8201600401166080840152610ba7565b60808301805160040163ffffffff1690525b610baf61066f565b98975050505050505050565b6000603f601a86901c16801580610bea575060088163ffffffff1610158015610bea5750600f8163ffffffff16105b1561104057603f86168160088114610c315760098114610c3a57600a8114610c4357600b8114610c4c57600c8114610c5557600d8114610c5e57600e8114610c6757610c6c565b60209150610c6c565b60219150610c6c565b602a9150610c6c565b602b9150610c6c565b60249150610c6c565b60259150610c6c565b602691505b508063ffffffff16600003610c935750505063ffffffff8216601f600686901c161b611343565b8063ffffffff16600203610cb95750505063ffffffff8216601f600686901c161c611343565b8063ffffffff16600303610cef57601f600688901c16610ce563ffffffff8716821c6020839003610938565b9350505050611343565b8063ffffffff16600403610d115750505063ffffffff8216601f84161b611343565b8063ffffffff16600603610d335750505063ffffffff8216601f84161c611343565b8063ffffffff16600703610d6657610d5d8663ffffffff168663ffffffff16901c87602003610938565b92505050611343565b8063ffffffff16600803610d7e578592505050611343565b8063ffffffff16600903610d96578592505050611343565b8063ffffffff16600a03610dae578592505050611343565b8063ffffffff16600b03610dc6578592505050611343565b8063ffffffff16600c03610dde578592505050611343565b8063ffffffff16600f03610df6578592505050611343565b8063ffffffff16601003610e0e578592505050611343565b8063ffffffff16601103610e26578592505050611343565b8063ffffffff16601203610e3e578592505050611343565b8063ffffffff16601303610e56578592505050611343565b8063ffffffff16601803610e6e578592505050611343565b8063ffffffff16601903610e86578592505050611343565b8063ffffffff16601a03610e9e578592505050611343565b8063ffffffff16601b03610eb6578592505050611343565b8063ffffffff16602003610ecf57505050828201611343565b8063ffffffff16602103610ee857505050828201611343565b8063ffffffff16602203610f0157505050818303611343565b8063ffffffff16602303610f1a57505050818303611343565b8063ffffffff16602403610f3357505050828216611343565b8063ffffffff16602503610f4c57505050828217611343565b8063ffffffff16602603610f6557505050828218611343565b8063ffffffff16602703610f7f5750505082821719611343565b8063ffffffff16602a03610fb0578460030b8660030b12610fa1576000610fa4565b60015b60ff1692505050611343565b8063ffffffff16602b03610fd8578463ffffffff168663ffffffff1610610fa1576000610fa4565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420696e737472756374696f6e0000000000000000000000000060448201526064016108d1565b50610fd8565b8063ffffffff16601c036110c457603f8616600281900361106657505050828202611343565b8063ffffffff166020148061108157508063ffffffff166021145b1561103a578063ffffffff16602003611098579419945b60005b63800000008716156110ba576401fffffffe600197881b16960161109b565b9250611343915050565b8063ffffffff16600f036110e657505065ffffffff0000601083901b16611343565b8063ffffffff166020036111225761111a8560031660080260180363ffffffff168463ffffffff16901c60ff166008610938565b915050611343565b8063ffffffff166021036111575761111a8560021660080260100363ffffffff168463ffffffff16901c61ffff166010610938565b8063ffffffff1660220361118657505063ffffffff60086003851602811681811b198416918316901b17611343565b8063ffffffff1660230361119d5782915050611343565b8063ffffffff166024036111cf578460031660080260180363ffffffff168363ffffffff16901c60ff16915050611343565b8063ffffffff16602503611202578460021660080260100363ffffffff168363ffffffff16901c61ffff16915050611343565b8063ffffffff1660260361123457505063ffffffff60086003851602601803811681811c198416918316901c17611343565b8063ffffffff1660280361126a57505060ff63ffffffff60086003861602601803811682811b9091188316918416901b17611343565b8063ffffffff166029036112a157505061ffff63ffffffff60086002861602601003811682811b9091188316918416901b17611343565b8063ffffffff16602a036112d057505063ffffffff60086003851602811681811c198316918416901c17611343565b8063ffffffff16602b036112e75783915050611343565b8063ffffffff16602e0361131957505063ffffffff60086003851602601803811681811b198316918416901b17611343565b8063ffffffff166030036113305782915050611343565b8063ffffffff16603803610fd857839150505b949350505050565b6000611355611d8c565b506080602063ffffffff8616106113c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f76616c696420726567697374657200000000000000000000000000000000000060448201526064016108d1565b63ffffffff8516158015906113da5750825b1561140e57838161016001518663ffffffff16602081106113fd576113fd611f46565b63ffffffff90921660209290920201525b60808101805163ffffffff8082166060850152600490910116905261066661066f565b600061143b611d8c565b506101e051604081015160808083015160a084015160c09094015191936000928392919063ffffffff8616610ffa036114b55781610fff81161561148457610fff811661100003015b8363ffffffff166000036114ab5760e08801805163ffffffff8382011690915295506114af565b8395505b50611927565b8563ffffffff16610fcd036114d05763400000009450611927565b8563ffffffff16611018036114e85760019450611927565b8563ffffffff166110960361151e57600161012088015260ff831661010088015261151161066f565b9998505050505050505050565b8563ffffffff16610fa30361178a5763ffffffff831615611927577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb63ffffffff8416016117445760006115798363fffffffc16600161078b565b60208901519091508060001a6001036115e857604080516000838152336020528d83526060902091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790505b6040808a015190517fe03110e10000000000000000000000000000000000000000000000000000000081526004810183905263ffffffff9091166024820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000003bd7e801e51d48c5d94ea68e8b801dffc275de75169063e03110e1906044016040805180830381865afa158015611689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ad9190611f75565b915091506003861680600403828110156116c5578092505b50818610156116d2578591505b8260088302610100031c9250826008828460040303021b9250600180600883600403021b036001806008858560040303021b039150811981169050838119871617955050506117298663fffffffc16600186611c3f565b60408b018051820163ffffffff169052975061178592505050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd63ffffffff84160161177957809450611927565b63ffffffff9450600993505b611927565b8563ffffffff16610fa40361187b5763ffffffff8316600114806117b4575063ffffffff83166002145b806117c5575063ffffffff83166004145b156117d257809450611927565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63ffffffff8416016117795760006118128363fffffffc16600161078b565b6020890151909150600384166004038381101561182d578093505b83900360089081029290921c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193850293841b0116911b17602088015260006040880152935083611927565b8563ffffffff16610fd703611927578163ffffffff1660030361191b5763ffffffff831615806118b1575063ffffffff83166005145b806118c2575063ffffffff83166003145b156118d05760009450611927565b63ffffffff8316600114806118eb575063ffffffff83166002145b806118fc575063ffffffff83166006145b8061190d575063ffffffff83166004145b156117795760019450611927565b63ffffffff9450601693505b6101608701805163ffffffff808816604090920191909152905185821660e09091015260808801805180831660608b0152600401909116905261151161066f565b6000611972611d8c565b506080600063ffffffff8716601003611990575060c0810151611bd6565b8663ffffffff166011036119af5763ffffffff861660c0830152611bd6565b8663ffffffff166012036119c8575060a0810151611bd6565b8663ffffffff166013036119e75763ffffffff861660a0830152611bd6565b8663ffffffff16601803611a1b5763ffffffff600387810b9087900b02602081901c821660c08501521660a0830152611bd6565b8663ffffffff16601903611a4c5763ffffffff86811681871602602081901c821660c08501521660a0830152611bd6565b8663ffffffff16601a03611b0f578460030b600003611ac7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f0000000000000000000060448201526064016108d1565b8460030b8660030b81611adc57611adc611f99565b0763ffffffff1660c0830152600385810b9087900b81611afe57611afe611f99565b0563ffffffff1660a0830152611bd6565b8663ffffffff16601b03611bd6578463ffffffff16600003611b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d4950533a206469766973696f6e206279207a65726f0000000000000000000060448201526064016108d1565b8463ffffffff168663ffffffff1681611ba857611ba8611f99565b0663ffffffff90811660c084015285811690871681611bc957611bc9611f99565b0463ffffffff1660a08301525b63ffffffff841615611c1157808261016001518563ffffffff1660208110611c0057611c00611f46565b63ffffffff90921660209290920201525b60808201805163ffffffff80821660608601526004909101169052611c3461066f565b979650505050505050565b6000611c4a83611ce3565b90506003841615611c5a57600080fd5b6020810190601f8516601c0360031b83811b913563ffffffff90911b1916178460051c60005b601b811015611cd85760208401933582821c6001168015611ca85760018114611cbd57611cce565b60008581526020839052604090209450611cce565b600082815260208690526040902094505b5050600101611c80565b505060805250505050565b60ff8116610380026101a4810190369061052401811015611d86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f636865636b207468617420746865726520697320656e6f7567682063616c6c6460448201527f617461000000000000000000000000000000000000000000000000000000000060648201526084016108d1565b50919050565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101919091526101608101611df2611df7565b905290565b6040518061040001604052806020906020820280368337509192915050565b600060208083528351808285015260005b81811015611e4357858101830151858201604001528201611e27565b81811115611e55576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008083601f840112611e9b57600080fd5b50813567ffffffffffffffff811115611eb357600080fd5b602083019150836020828501011115611ecb57600080fd5b9250929050565b600080600080600060608688031215611eea57600080fd5b853567ffffffffffffffff80821115611f0257600080fd5b611f0e89838a01611e89565b90975095506020880135915080821115611f2757600080fd5b50611f3488828901611e89565b96999598509660400135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008060408385031215611f8857600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea164736f6c634300080f000a"; bytes internal constant anchorStateRegistryCode = - hex"608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa673ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb1681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb73ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a"; bytes internal constant acc27Code = - hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce83610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d73ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d1690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f9092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce8373ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce8373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f1690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; + hex"6080604052600436106102f25760003560e01c806370872aa51161018f578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b18578063fa315aa914610b3c578063fe2bbeb214610b6f57600080fd5b8063ec5e630814610a95578063eff0f59214610ac8578063f8f43ff614610af857600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a0f578063d8cc1a3c14610a42578063dabd396d14610a6257600080fd5b8063c6f0308c14610937578063cf09e0d0146109c1578063d5d44d80146109e257600080fd5b80638d450a9511610143578063bcef3b551161011d578063bcef3b55146108b7578063bd8da956146108f7578063c395e1ca1461091757600080fd5b80638d450a9514610777578063a445ece6146107aa578063bbdc02db1461087657600080fd5b80638129fc1c116101745780638129fc1c1461071a5780638980e0cc146107225780638b85902b1461073757600080fd5b806370872aa5146106f25780637b0f0adc1461070757600080fd5b80633fc8cef3116102485780635c0cba33116101fc5780636361506d116101d65780636361506d1461066c5780636b6716c0146106ac5780636f034409146106df57600080fd5b80635c0cba3314610604578063609d33341461063757806360e274641461064c57600080fd5b806354fd4d501161022d57806354fd4d501461055e57806357da950e146105b45780635a5fa2d9146105e457600080fd5b80633fc8cef314610518578063472777c61461054b57600080fd5b80632810e1d6116102aa57806337b1b2291161028457806337b1b229146104655780633a768463146104a55780633e3ac912146104d857600080fd5b80632810e1d6146103de5780632ad69aeb146103f357806330dbe5701461041357600080fd5b806319effeb4116102db57806319effeb414610339578063200d2ed21461038457806325fc2ace146103bf57600080fd5b806301935130146102f757806303c2924d14610319575b600080fd5b34801561030357600080fd5b5061031761031236600461532d565b610b9f565b005b34801561032557600080fd5b50610317610334366004615388565b610ec0565b34801561034557600080fd5b506000546103669068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561039057600080fd5b506000546103b290700100000000000000000000000000000000900460ff1681565b60405161037b91906153d9565b3480156103cb57600080fd5b506008545b60405190815260200161037b565b3480156103ea57600080fd5b506103b2611566565b3480156103ff57600080fd5b506103d061040e366004615388565b61180b565b34801561041f57600080fd5b506001546104409073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161037b565b34801561047157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610440565b3480156104b157600080fd5b507f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce83610440565b3480156104e457600080fd5b50600054610508907201000000000000000000000000000000000000900460ff1681565b604051901515815260200161037b565b34801561052457600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610440565b61031761055936600461541a565b611841565b34801561056a57600080fd5b506105a76040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161037b91906154b1565b3480156105c057600080fd5b506008546009546105cf919082565b6040805192835260208301919091520161037b565b3480156105f057600080fd5b506103d06105ff3660046154c4565b611853565b34801561061057600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610440565b34801561064357600080fd5b506105a761188d565b34801561065857600080fd5b50610317610667366004615502565b61189b565b34801561067857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103d0565b3480156106b857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610366565b6103176106ed366004615534565b611a42565b3480156106fe57600080fd5b506009546103d0565b61031761071536600461541a565b6123e3565b6103176123f0565b34801561072e57600080fd5b506002546103d0565b34801561074357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103d0565b34801561078357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103d0565b3480156107b657600080fd5b506108226107c53660046154c4565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff16606082015260800161037b565b34801561088257600080fd5b5060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161037b565b3480156108c357600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103d0565b34801561090357600080fd5b506103666109123660046154c4565b612949565b34801561092357600080fd5b506103d0610932366004615573565b612b28565b34801561094357600080fd5b506109576109523660046154c4565b612d0b565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e00161037b565b3480156109cd57600080fd5b506000546103669067ffffffffffffffff1681565b3480156109ee57600080fd5b506103d06109fd366004615502565b60036020526000908152604090205481565b348015610a1b57600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103d0565b348015610a4e57600080fd5b50610317610a5d3660046155a5565b612da2565b348015610a6e57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b0610366565b348015610aa157600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103d0565b348015610ad457600080fd5b50610508610ae33660046154c4565b60046020526000908152604090205460ff1681565b348015610b0457600080fd5b50610317610b1336600461541a565b6133d1565b348015610b2457600080fd5b50610b2d613823565b60405161037b9392919061562f565b348015610b4857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103d0565b348015610b7b57600080fd5b50610508610b8a3660046154c4565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610bcb57610bcb6153aa565b14610c02576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610c55576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c8c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610ca3610c9e36869003860186615683565b613883565b14610cda576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610cef929190615710565b604051809103902014610d2e576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d77610d7284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138df92505050565b61394c565b90506000610d9e82600881518110610d9157610d91615720565b6020026020010151613b02565b9050602081511115610ddc576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610e51576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610eec57610eec6153aa565b14610f23576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610f3857610f38615720565b906000526020600020906005020190506000610f5384612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015610fbc576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611005576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561102257508515155b156110bd578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110555781611071565b600186015473ffffffffffffffffffffffffffffffffffffffff165b905061107d8187613bb6565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff166060830152611160576fffffffffffffffffffffffffffffffff6040820152600181526000869003611160578195505b600086826020015163ffffffff16611178919061577e565b90506000838211611189578161118b565b835b602084015190915063ffffffff165b818110156112d75760008682815481106111b6576111b6615720565b6000918252602080832090910154808352600690915260409091205490915060ff1661120e576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061122357611223615720565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112805750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b156112c257600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b505080806112cf90615796565b91505061119a565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9093169290921790915584900361155b57606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558915801561145757506000547201000000000000000000000000000000000000900460ff165b156114cc5760015473ffffffffffffffffffffffffffffffffffffffff1661147f818a613bb6565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909116178855611559565b61151373ffffffffffffffffffffffffffffffffffffffff8216156114f1578161150d565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89613bb6565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff166002811115611594576115946153aa565b146115cb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff1661162f576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008154811061165b5761165b615720565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611696576001611699565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff9091161770010000000000000000000000000000000083600281111561174a5761174a6153aa565b02179055600281111561175f5761175f6153aa565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156117f057600080fd5b505af1158015611804573d6000803e3d6000fd5b5050505090565b6005602052816000526040600020818154811061182757600080fd5b90600052602060002001600091509150505481565b905090565b61184e8383836001611a42565b505050565b6000818152600760209081526040808320600590925282208054825461188490610100900463ffffffff16826157ce565b95945050505050565b606061183c60546020613cb7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040812080549082905590819003611900576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b15801561199057600080fd5b505af11580156119a4573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a02576040519150601f19603f3d011682016040523d82523d6000602084013e611a07565b606091505b505090508061184e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054700100000000000000000000000000000000900460ff166002811115611a6e57611a6e6153aa565b14611aa5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110611aba57611aba615720565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514611ba1576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000611c61826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580611c9c5750611c997f0000000000000000000000000000000000000000000000000000000000000004600261577e565b81145b8015611ca6575084155b15611cdd576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015611d03575086155b15611d3a576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115611d94576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dbf7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b8103611dd157611dd186888588613d09565b34611ddb83612b28565b14611e12576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e1d88612949565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603611e85576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016611ee591906157e5565b67ffffffffffffffff16611f008267ffffffffffffffff1690565b67ffffffffffffffff161115611fe2576000611f3d60017f00000000000000000000000000000000000000000000000000000000000000046157ce565b8314611f735767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016611fa8565b611fa87f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff16600261580e565b9050611fde817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff166157e5565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615612060576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b815260200190815260200160002060016002805490506122f691906157ce565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b15801561238e57600080fd5b505af11580156123a2573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b61184e8383836000611a42565b60005471010000000000000000000000000000000000900460ff1615612442576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa1580156124f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251a919061583e565b909250905081612556576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461258957639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036054013511612623576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b1580156128f857600080fd5b505af115801561290c573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b600080600054700100000000000000000000000000000000900460ff166002811115612977576129776153aa565b146129ae576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600283815481106129c3576129c3615720565b600091825260208220600590910201805490925063ffffffff90811614612a3257815460028054909163ffffffff16908110612a0157612a01615720565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090612a6a90700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b612a7e9067ffffffffffffffff16426157ce565b612a9d612a5d846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16612ab1919061577e565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611612afe5780611884565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080612bc7836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115612c26576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000612c418383615891565b9050670de0b6b3a76400006000612c78827f00000000000000000000000000000000000000000000000000000000000000086158a5565b90506000612c96612c91670de0b6b3a7640000866158a5565b613eba565b90506000612ca48484614115565b90506000612cb28383614164565b90506000612cbf82614192565b90506000612cde82612cd9670de0b6b3a76400008f6158a5565b61437a565b90506000612cec8b83614164565b9050612cf8818d6158a5565b9f9e505050505050505050505050505050565b60028181548110612d1b57600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b60008054700100000000000000000000000000000000900460ff166002811115612dce57612dce6153aa565b14612e05576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110612e1a57612e1a615720565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050612e797f0000000000000000000000000000000000000000000000000000000000000008600161577e565b612f15826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614612f4f576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561304657612fa27f00000000000000000000000000000000000000000000000000000000000000047f00000000000000000000000000000000000000000000000000000000000000086157ce565b6001901b612fc1846fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff16612fdd91906158e2565b1561301a5761301161300260016fffffffffffffffffffffffffffffffff87166158f6565b865463ffffffff166000614453565b6003015461303c565b7f00000000000000000000000000000000000000000000000000000000000000005b9150849050613070565b6003850154915061306d6130026fffffffffffffffffffffffffffffffff8616600161591f565b90505b600882901b60088a8a604051613087929190615710565b6040518091039020901b146130c8576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006130d38c614537565b905060006130e2836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce8373ffffffffffffffffffffffffffffffffffffffff169063e14ced329061315c908f908f908f908f908a9060040161599c565b6020604051808303816000875af115801561317b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319f91906159d6565b60048501549114915060009060029061324a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132e6896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6132f091906159ef565b6132fa9190615a12565b60ff16159050811515810361333b576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156133fd576133fd6153aa565b14613434576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008061344386614566565b935093509350935060006134598585858561496f565b905060007f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce8373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ec9190615a34565b9050600189036135e45773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a84613548367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de91906159d6565b5061155b565b600289036136105773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8489613548565b6003890361363c5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8487613548565b600489036137585760006136826fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614a29565b60095461368f919061577e565b61369a90600161577e565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561372d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375191906159d6565b505061155b565b600589036137f1576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a40161359b565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135606061387c61188d565b9050909192565b600081600001518260200151836040015184606001516040516020016138c2949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b6040805180820190915260008082526020820152815160000361392e576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b6060600080600061395c85614ad7565b919450925090506001816001811115613977576139776153aa565b146139ae576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516139ba838561577e565b146139f1576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081613a085790505093506000835b8651811015613af657600080613a7b6040518060400160405280858c60000151613a5f91906157ce565b8152602001858c60200151613a74919061577e565b9052614ad7565b509150915060405180604001604052808383613a97919061577e565b8152602001848b60200151613aac919061577e565b815250888581518110613ac157613ac1615720565b6020908102919091010152613ad760018561577e565b9350613ae3818361577e565b613aed908461577e565b92505050613a35565b50845250919392505050565b60606000806000613b1285614ad7565b919450925090506000816001811115613b2d57613b2d6153aa565b14613b64576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b6e828461577e565b855114613ba7576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188485602001518484614f75565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff90931692839290613c0590849061577e565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b158015613c9a57600080fd5b505af1158015613cae573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b6000613d286fffffffffffffffffffffffffffffffff8416600161591f565b90506000613d3882866001614453565b9050600086901a8380613e245750613d7160027f00000000000000000000000000000000000000000000000000000000000000046158e2565b6004830154600290613e15906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b613e1f9190615a12565b60ff16145b15613e7c5760ff811660011480613e3e575060ff81166002145b613e77576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b613cae565b60ff811615613cae576040517ff40239db0000000000000000000000000000000000000000000000000000000081526004810188905260240161261a565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b1760008213613f1957631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a76400000215820261415257637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b6000816000190483118202156141825763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d782136141c057919050565b680755bf798b4a1bf1e582126141de5763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60006143ab670de0b6b3a76400008361439286613eba565b61439c9190615a51565b6143a69190615b0d565b614192565b90505b92915050565b600080614441837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b6000808261449c576144976fffffffffffffffffffffffffffffffff86167f000000000000000000000000000000000000000000000000000000000000000461500a565b6144b7565b6144b7856fffffffffffffffffffffffffffffffff16615196565b9050600284815481106144cc576144cc615720565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461452f57815460028054909163ffffffff1690811061451a5761451a615720565b906000526020600020906005020191506144dd565b509392505050565b600080600080600061454886614566565b935093509350935061455c8484848461496f565b9695505050505050565b600080600080600085905060006002828154811061458657614586615720565b600091825260209091206004600590920201908101549091507f00000000000000000000000000000000000000000000000000000000000000049061465d906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611614697576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f00000000000000000000000000000000000000000000000000000000000000049061475e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156147d357825463ffffffff1661479d7f0000000000000000000000000000000000000000000000000000000000000004600161577e565b83036147a7578391505b600281815481106147ba576147ba615720565b906000526020600020906005020193508094505061469b565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661483c614827856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561490b576000614874836fffffffffffffffffffffffffffffffff166143b4565b6fffffffffffffffffffffffffffffffff1611156148df5760006148b66148ae60016fffffffffffffffffffffffffffffffff86166158f6565b896001614453565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506148e59050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614961565b600061492d6148ae6fffffffffffffffffffffffffffffffff8516600161591f565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156149dc5760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611884565b8282604051602001614a0a9291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b600080614ab6847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614b1a576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614b3f576000600160009450945094505050614f6e565b60b78111614c55576000614b546080836157ce565b905080876000015111614b93576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614c0b57507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614c42576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614f6e915050565b60bf8111614db3576000614c6a60b7836157ce565b905080876000015111614ca9576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614d0b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614d53576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614d5d818461577e565b895111614d96576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614da183600161577e565b9750955060009450614f6e9350505050565b60f78111614e18576000614dc860c0836157ce565b905080876000015111614e07576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614f6e915050565b6000614e2560f7836157ce565b905080876000015111614e64576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614ec6576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614f0e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f18818461577e565b895111614f51576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614f5c83600161577e565b9750955060019450614f6e9350505050565b9193909250565b60608167ffffffffffffffff811115614f9057614f90615654565b6040519080825280601f01601f191660200182016040528015614fba576020820181803683370190505b5090508115615003576000614fcf848661577e565b90506020820160005b84811015614ff0578281015182820152602001614fd8565b84811115614fff576000858301525b5050505b9392505050565b6000816150a9846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116150bf5763b34b5c226000526004601cfd5b6150c883615196565b905081615167826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116143ae576143ab61517d83600161577e565b6fffffffffffffffffffffffffffffffff83169061523b565b6000811960018301168161522a827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b6000806152c8847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f8401126152f657600080fd5b50813567ffffffffffffffff81111561530e57600080fd5b60208301915083602082850101111561532657600080fd5b9250929050565b600080600083850360a081121561534357600080fd5b608081121561535157600080fd5b50839250608084013567ffffffffffffffff81111561536f57600080fd5b61537b868287016152e4565b9497909650939450505050565b6000806040838503121561539b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310615414577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060006060848603121561542f57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561546c57602081850181015186830182015201615450565b8181111561547e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006143ab6020830184615446565b6000602082840312156154d657600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff811681146154ff57600080fd5b50565b60006020828403121561551457600080fd5b8135615003816154dd565b8035801515811461552f57600080fd5b919050565b6000806000806080858703121561554a57600080fd5b8435935060208501359250604085013591506155686060860161551f565b905092959194509250565b60006020828403121561558557600080fd5b81356fffffffffffffffffffffffffffffffff8116811461500357600080fd5b600080600080600080608087890312156155be57600080fd5b863595506155ce6020880161551f565b9450604087013567ffffffffffffffff808211156155eb57600080fd5b6155f78a838b016152e4565b9096509450606089013591508082111561561057600080fd5b5061561d89828a016152e4565b979a9699509497509295939492505050565b63ffffffff841681528260208201526060604082015260006118846060830184615446565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561569557600080fd5b6040516080810181811067ffffffffffffffff821117156156df577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157915761579161574f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c7576157c761574f565b5060010190565b6000828210156157e0576157e061574f565b500390565b600067ffffffffffffffff838116908316818110156158065761580661574f565b039392505050565b600067ffffffffffffffff808316818516818304811182151516156158355761583561574f565b02949350505050565b6000806040838503121561585157600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158a0576158a0615862565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158dd576158dd61574f565b500290565b6000826158f1576158f1615862565b500690565b60006fffffffffffffffffffffffffffffffff838116908316818110156158065761580661574f565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561594a5761594a61574f565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6060815260006159b0606083018789615953565b82810360208401526159c3818688615953565b9150508260408301529695505050505050565b6000602082840312156159e857600080fd5b5051919050565b600060ff821660ff841680821015615a0957615a0961574f565b90039392505050565b600060ff831680615a2557615a25615862565b8060ff84160691505092915050565b600060208284031215615a4657600080fd5b8151615003816154dd565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615a9257615a9261574f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615acd57615acd61574f565b60008712925087820587128484161615615ae957615ae961574f565b87850587128184161615615aff57615aff61574f565b505050929093029392505050565b600082615b1c57615b1c615862565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b7057615b7061574f565b50059056fea164736f6c634300080f000a"; bytes internal constant acc28Code = - hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce83610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d73ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce8373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f1690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d1690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f9092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce8373ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; + hex"6080604052600436106103085760003560e01c806370872aa51161019a578063c6f0308c116100e1578063ec5e63081161008a578063fa24f74311610064578063fa24f74314610b94578063fa315aa914610bb8578063fe2bbeb214610beb57600080fd5b8063ec5e630814610b11578063eff0f59214610b44578063f8f43ff614610b7457600080fd5b8063d6ae3cd5116100bb578063d6ae3cd514610a8b578063d8cc1a3c14610abe578063dabd396d14610ade57600080fd5b8063c6f0308c146109b3578063cf09e0d014610a3d578063d5d44d8014610a5e57600080fd5b8063a445ece611610143578063bcef3b551161011d578063bcef3b5514610933578063bd8da95614610973578063c395e1ca1461099357600080fd5b8063a445ece6146107f3578063a8e4fb90146108bf578063bbdc02db146108f257600080fd5b80638980e0cc116101745780638980e0cc1461076b5780638b85902b146107805780638d450a95146107c057600080fd5b806370872aa51461073b5780637b0f0adc146107505780638129fc1c1461076357600080fd5b80633fc8cef31161025e5780635c0cba33116102075780636361506d116101e15780636361506d146106b55780636b6716c0146106f55780636f0344091461072857600080fd5b80635c0cba331461064d578063609d33341461068057806360e274641461069557600080fd5b806354fd4d501161023857806354fd4d50146105a757806357da950e146105fd5780635a5fa2d91461062d57600080fd5b80633fc8cef31461052e578063472777c614610561578063534db0e21461057457600080fd5b80632810e1d6116102c057806337b1b2291161029a57806337b1b2291461047b5780633a768463146104bb5780633e3ac912146104ee57600080fd5b80632810e1d6146103f45780632ad69aeb1461040957806330dbe5701461042957600080fd5b806319effeb4116102f157806319effeb41461034f578063200d2ed21461039a57806325fc2ace146103d557600080fd5b8063019351301461030d57806303c2924d1461032f575b600080fd5b34801561031957600080fd5b5061032d6103283660046155a8565b610c1b565b005b34801561033b57600080fd5b5061032d61034a366004615603565b610f3c565b34801561035b57600080fd5b5060005461037c9068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156103a657600080fd5b506000546103c890700100000000000000000000000000000000900460ff1681565b6040516103919190615654565b3480156103e157600080fd5b506008545b604051908152602001610391565b34801561040057600080fd5b506103c86115e2565b34801561041557600080fd5b506103e6610424366004615603565b611887565b34801561043557600080fd5b506001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610391565b34801561048757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610456565b3480156104c757600080fd5b507f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce83610456565b3480156104fa57600080fd5b5060005461051e907201000000000000000000000000000000000000900460ff1681565b6040519015158152602001610391565b34801561053a57600080fd5b507f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6610456565b61032d61056f366004615695565b6118bd565b34801561058057600080fd5b507f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b63610456565b3480156105b357600080fd5b506105f06040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b604051610391919061572c565b34801561060957600080fd5b50600854600954610618919082565b60408051928352602083019190915201610391565b34801561063957600080fd5b506103e661064836600461573f565b6118cf565b34801561065957600080fd5b507f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4610456565b34801561068c57600080fd5b506105f0611909565b3480156106a157600080fd5b5061032d6106b036600461577d565b611917565b3480156106c157600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e6565b34801561070157600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061037c565b61032d6107363660046157af565b611abe565b34801561074757600080fd5b506009546103e6565b61032d61075e366004615695565b611b7f565b61032d611b8c565b34801561077757600080fd5b506002546103e6565b34801561078c57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e6565b3480156107cc57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e6565b3480156107ff57600080fd5b5061086b61080e36600461573f565b6007602052600090815260409020805460019091015460ff821691610100810463ffffffff1691650100000000009091046fffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff1684565b60408051941515855263ffffffff90931660208501526fffffffffffffffffffffffffffffffff9091169183019190915273ffffffffffffffffffffffffffffffffffffffff166060820152608001610391565b3480156108cb57600080fd5b507f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8610456565b3480156108fe57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000001168152602001610391565b34801561093f57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e6565b34801561097f57600080fd5b5061037c61098e36600461573f565b611c05565b34801561099f57600080fd5b506103e66109ae3660046157ee565b611de4565b3480156109bf57600080fd5b506109d36109ce36600461573f565b611fc7565b6040805163ffffffff909816885273ffffffffffffffffffffffffffffffffffffffff968716602089015295909416948601949094526fffffffffffffffffffffffffffffffff9182166060860152608085015291821660a08401521660c082015260e001610391565b348015610a4957600080fd5b5060005461037c9067ffffffffffffffff1681565b348015610a6a57600080fd5b506103e6610a7936600461577d565b60036020526000908152604090205481565b348015610a9757600080fd5b507f00000000000000000000000000000000000000000000000000000000000003856103e6565b348015610aca57600080fd5b5061032d610ad9366004615820565b61205e565b348015610aea57600080fd5b507f00000000000000000000000000000000000000000000000000000000000004b061037c565b348015610b1d57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000046103e6565b348015610b5057600080fd5b5061051e610b5f36600461573f565b60046020526000908152604090205460ff1681565b348015610b8057600080fd5b5061032d610b8f366004615695565b612123565b348015610ba057600080fd5b50610ba9612575565b604051610391939291906158aa565b348015610bc457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000086103e6565b348015610bf757600080fd5b5061051e610c0636600461573f565b60066020526000908152604090205460ff1681565b60008054700100000000000000000000000000000000900460ff166002811115610c4757610c47615625565b14610c7e576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff1615610cd1576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d08367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013590565b90565b610d1f610d1a368690038601866158fe565b6125d5565b14610d56576040517f9cc00b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82606001358282604051610d6b92919061598b565b604051809103902014610daa576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610df3610dee84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061263192505050565b61269e565b90506000610e1a82600881518110610e0d57610e0d61599b565b6020026020010151612854565b9050602081511115610e58576040517fd81d583b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081810151825190910360031b1c367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401358103610ecd576040517fb8ed883000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050600080547fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000001790555050565b60008054700100000000000000000000000000000000900460ff166002811115610f6857610f68615625565b14610f9f576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110610fb457610fb461599b565b906000526020600020906005020190506000610fcf84611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b081169082161015611038576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526006602052604090205460ff1615611081576040517ff1a9458100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084815260056020526040902080548015801561109e57508515155b15611139578354640100000000900473ffffffffffffffffffffffffffffffffffffffff16600081156110d157816110ed565b600186015473ffffffffffffffffffffffffffffffffffffffff165b90506110f98187612908565b50505060009485525050600660205250506040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000868152600760209081526040918290208251608081018452815460ff81161515808352610100820463ffffffff16948301949094526501000000000090046fffffffffffffffffffffffffffffffff16938101939093526001015473ffffffffffffffffffffffffffffffffffffffff1660608301526111dc576fffffffffffffffffffffffffffffffff60408201526001815260008690036111dc578195505b600086826020015163ffffffff166111f491906159f9565b905060008382116112055781611207565b835b602084015190915063ffffffff165b818110156113535760008682815481106112325761123261599b565b6000918252602080832090910154808352600690915260409091205490915060ff1661128a576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002828154811061129f5761129f61599b565b600091825260209091206005909102018054909150640100000000900473ffffffffffffffffffffffffffffffffffffffff161580156112fc5750600481015460408701516fffffffffffffffffffffffffffffffff9182169116115b1561133e57600181015473ffffffffffffffffffffffffffffffffffffffff16606087015260048101546fffffffffffffffffffffffffffffffff1660408701525b5050808061134b90615a11565b915050611216565b5063ffffffff818116602085810191825260008c81526007909152604090819020865181549351928801517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009094169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff161761010092909416918202939093177fffffffffffffffffffffff00000000000000000000000000000000ffffffffff16650100000000006fffffffffffffffffffffffffffffffff909316929092029190911782556060850151600190920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092179091558490036115d757606083015160008a815260066020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055891580156114d357506000547201000000000000000000000000000000000000900460ff165b156115485760015473ffffffffffffffffffffffffffffffffffffffff166114fb818a612908565b885473ffffffffffffffffffffffffffffffffffffffff909116640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff9091161788556115d5565b61158f73ffffffffffffffffffffffffffffffffffffffff82161561156d5781611589565b600189015473ffffffffffffffffffffffffffffffffffffffff165b89612908565b87547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff8316021788555b505b505050505050505050565b600080600054700100000000000000000000000000000000900460ff16600281111561161057611610615625565b14611647576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85460ff166116ab576040517f9a07664600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660026000815481106116d7576116d761599b565b6000918252602090912060059091020154640100000000900473ffffffffffffffffffffffffffffffffffffffff1614611712576001611715565b60025b6000805467ffffffffffffffff421668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff82168117835592935083927fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff909116177001000000000000000000000000000000008360028111156117c6576117c6615625565b0217905560028111156117db576117db615625565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e473ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505090565b600560205281600052604060002081815481106118a357600080fd5b90600052602060002001600091509150505481565b905090565b6118ca8383836001611abe565b505050565b6000818152600760209081526040808320600590925282208054825461190090610100900463ffffffff1682615a49565b95945050505050565b60606118b860546020612a09565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054908290559081900361197c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169063f3fef3a390604401600060405180830381600087803b158015611a0c57600080fd5b505af1158015611a20573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611a7e576040519150601f19603f3d011682016040523d82523d6000602084013e611a83565b606091505b50509050806118ca576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8161480611b3757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b611b6d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7984848484612a5b565b50505050565b6118ca8383836000611abe565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614611bfb576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c036133fc565b565b600080600054700100000000000000000000000000000000900460ff166002811115611c3357611c33615625565b14611c6a576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028381548110611c7f57611c7f61599b565b600091825260208220600590910201805490925063ffffffff90811614611cee57815460028054909163ffffffff16908110611cbd57611cbd61599b565b906000526020600020906005020160040160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b6004820154600090611d2690700100000000000000000000000000000000900467ffffffffffffffff165b67ffffffffffffffff1690565b611d3a9067ffffffffffffffff1642615a49565b611d59611d19846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16611d6d91906159f9565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b01667ffffffffffffffff168167ffffffffffffffff1611611dba5780611900565b7f00000000000000000000000000000000000000000000000000000000000004b095945050505050565b600080611e83836fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690507f0000000000000000000000000000000000000000000000000000000000000008811115611ee2576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b642e90edd00062061a806311e1a3006000611efd8383615a8f565b9050670de0b6b3a76400006000611f34827f0000000000000000000000000000000000000000000000000000000000000008615aa3565b90506000611f52611f4d670de0b6b3a764000086615aa3565b613955565b90506000611f608484613bb0565b90506000611f6e8383613bff565b90506000611f7b82613c2d565b90506000611f9a82611f95670de0b6b3a76400008f615aa3565b613e15565b90506000611fa88b83613bff565b9050611fb4818d615aa3565b9f9e505050505050505050505050505050565b60028181548110611fd757600080fd5b60009182526020909120600590910201805460018201546002830154600384015460049094015463ffffffff8416955064010000000090930473ffffffffffffffffffffffffffffffffffffffff908116949216926fffffffffffffffffffffffffffffffff91821692918082169170010000000000000000000000000000000090041687565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c81614806120d757503373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000006925b8704ff96dee942623d6fb5e946ef5884b6316145b61210d576040517fd386ef3e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211b868686868686613e4f565b505050505050565b60008054700100000000000000000000000000000000900460ff16600281111561214f5761214f615625565b14612186576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000806121958661447e565b935093509350935060006121ab85858585614887565b905060007f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce8373ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223e9190615ae0565b9050600189036123365773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a8461229a367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036034013590565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260048101939093526024830191909152604482015260206064820152608481018a905260a4015b6020604051808303816000875af115801561230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123309190615afd565b506115d7565b600289036123625773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848961229a565b6003890361238e5773ffffffffffffffffffffffffffffffffffffffff81166352f0f3ad8a848761229a565b600489036124aa5760006123d46fffffffffffffffffffffffffffffffff85167f0000000000000000000000000000000000000000000000000000000000000004614941565b6009546123e191906159f9565b6123ec9060016159f9565b905073ffffffffffffffffffffffffffffffffffffffff82166352f0f3ad8b8560405160e084901b7fffffffff000000000000000000000000000000000000000000000000000000001681526004810192909252602482015260c084901b604482015260086064820152608481018b905260a4016020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a39190615afd565b50506115d7565b60058903612543576040517f52f0f3ad000000000000000000000000000000000000000000000000000000008152600481018a9052602481018390527f000000000000000000000000000000000000000000000000000000000000038560c01b6044820152600860648201526084810188905273ffffffffffffffffffffffffffffffffffffffff8216906352f0f3ad9060a4016122ed565b6040517fff137e6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606125ce611909565b9050909192565b60008160000151826020015183604001518460600151604051602001612614949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201528151600003612680576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b606060008060006126ae856149ef565b9194509250905060018160018111156126c9576126c9615625565b14612700576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845161270c83856159f9565b14612743576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161275a5790505093506000835b8651811015612848576000806127cd6040518060400160405280858c600001516127b19190615a49565b8152602001858c602001516127c691906159f9565b90526149ef565b5091509150604051806040016040528083836127e991906159f9565b8152602001848b602001516127fe91906159f9565b8152508885815181106128135761281361599b565b60209081029190910101526128296001856159f9565b935061283581836159f9565b61283f90846159f9565b92505050612787565b50845250919392505050565b60606000806000612864856149ef565b91945092509050600081600181111561287f5761287f615625565b146128b6576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128c082846159f9565b8551146128f9576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61190085602001518484614e8d565b600281015473ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812080546fffffffffffffffffffffffffffffffff909316928392906129579084906159f9565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390527f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa61690637eee288d90604401600060405180830381600087803b1580156129ec57600080fd5b505af1158015612a00573d6000803e3d6000fd5b50505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008054700100000000000000000000000000000000900460ff166002811115612a8757612a87615625565b14612abe576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110612ad357612ad361599b565b60009182526020918290206040805160e0810182526005909302909101805463ffffffff8116845273ffffffffffffffffffffffffffffffffffffffff64010000000090910481169484019490945260018101549093169082015260028201546fffffffffffffffffffffffffffffffff908116606083015260038301546080830181905260049093015480821660a084015270010000000000000000000000000000000090041660c082015291508514612bba576040517f3014033200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a0810151600083156fffffffffffffffffffffffffffffffff83161760011b90506000612c7a826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050861580612cb55750612cb27f000000000000000000000000000000000000000000000000000000000000000460026159f9565b81145b8015612cbf575084155b15612cf6576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000547201000000000000000000000000000000000000900460ff168015612d1c575086155b15612d53576040517f0ea2e75200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000008811115612dad576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd87f000000000000000000000000000000000000000000000000000000000000000460016159f9565b8103612dea57612dea86888588614f22565b34612df483611de4565b14612e2b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e3688611c05565b905067ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b0811690821603612e9e576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000004b016612efe9190615b16565b67ffffffffffffffff16612f198267ffffffffffffffff1690565b67ffffffffffffffff161115612ffb576000612f5660017f0000000000000000000000000000000000000000000000000000000000000004615a49565b8314612f8c5767ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fc1565b612fc17f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166002615b3f565b9050612ff7817f00000000000000000000000000000000000000000000000000000000000004b067ffffffffffffffff16615b16565b9150505b6000604082901b42176000898152608086901b6fffffffffffffffffffffffffffffffff8c1617602052604081209192509060008181526004602052604090205490915060ff1615613079576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060e001604052808c63ffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff168152602001346fffffffffffffffffffffffffffffffff1681526020018b8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506080820151816003015560a08201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c08201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050600560008b8152602001908152602001600020600160028054905061330f9190615a49565b81546001810183556000928352602083200155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6169263d0e30db09234926004808301939282900301818588803b1580156133a757600080fd5b505af11580156133bb573d6000803e3d6000fd5b50506040513393508c92508d91507f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be90600090a45050505050505050505050565b60005471010000000000000000000000000000000000900460ff161561344e576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000001166004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e41690637258a807906024016040805180830381865afa158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135269190615b6f565b909250905081613562576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091528281526020018190526008829055600981905536607a1461359557639824bdab6000526004601cfd5b80367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401351161362f576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560048201526024015b60405180910390fd5b6040805160e08101825263ffffffff8082526000602083018181527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90038035606090811c868801908152346fffffffffffffffffffffffffffffffff81811693890193845260149094013560808901908152600160a08a0181815242871660c08c019081526002805493840181558a529a5160059092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054995173ffffffffffffffffffffffffffffffffffffffff908116640100000000027fffffffffffffffff000000000000000000000000000000000000000000000000909b1694909c16939093179890981790915592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf87018054918a167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0860180549186167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117905591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad185015551955182167001000000000000000000000000000000000295909116949094177f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091015580547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff167101000000000000000000000000000000000017815583517fd0e30db000000000000000000000000000000000000000000000000000000000815293517f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa69092169363d0e30db093926004828101939282900301818588803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff161790555050505050565b6fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff1060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b17600082136139b457631615e6386000526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007812725dd1d243aba0e75fe645cc4873f9e65afe688c928e1f218311670de0b6b3a764000002158202613bed57637c5f487d6000526004601cfd5b50670de0b6b3a7640000919091020490565b600081600019048311820215613c1d5763bac65e5b6000526004601cfd5b50670de0b6b3a764000091020490565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a462d78213613c5b57919050565b680755bf798b4a1bf1e58212613c795763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6000613e46670de0b6b3a764000083613e2d86613955565b613e379190615b93565b613e419190615c4f565b613c2d565b90505b92915050565b60008054700100000000000000000000000000000000900460ff166002811115613e7b57613e7b615625565b14613eb2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028781548110613ec757613ec761599b565b6000918252602082206005919091020160048101549092506fffffffffffffffffffffffffffffffff16908715821760011b9050613f267f000000000000000000000000000000000000000000000000000000000000000860016159f9565b613fc2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1614613ffc576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008089156140f35761404f7f00000000000000000000000000000000000000000000000000000000000000047f0000000000000000000000000000000000000000000000000000000000000008615a49565b6001901b61406e846fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1661408a9190615cb7565b156140c7576140be6140af60016fffffffffffffffffffffffffffffffff8716615ccb565b865463ffffffff166000615172565b600301546140e9565b7f00000000000000000000000000000000000000000000000000000000000000005b915084905061411d565b6003850154915061411a6140af6fffffffffffffffffffffffffffffffff86166001615cf4565b90505b600882901b60088a8a60405161413492919061598b565b6040518091039020901b14614175576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006141808c615256565b9050600061418f836003015490565b6040517fe14ced320000000000000000000000000000000000000000000000000000000081527f000000000000000000000000f698388bfcdbd3f9f2f13ebc3e01471b3cc7ce8373ffffffffffffffffffffffffffffffffffffffff169063e14ced3290614209908f908f908f908f908a90600401615d71565b6020604051808303816000875af1158015614228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061424c9190615afd565b6004850154911491506000906002906142f7906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b614393896fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b61439d9190615dab565b6143a79190615dce565b60ff1615905081151581036143e8576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8754640100000000900473ffffffffffffffffffffffffffffffffffffffff161561443f576040517f9071e6af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505085547fffffffffffffffff0000000000000000000000000000000000000000ffffffff163364010000000002179095555050505050505050505050565b600080600080600085905060006002828154811061449e5761449e61599b565b600091825260209091206004600590920201908101549091507f000000000000000000000000000000000000000000000000000000000000000490614575906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff16116145af576040517fb34b5c2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815b60048301547f000000000000000000000000000000000000000000000000000000000000000490614676906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1692508211156146eb57825463ffffffff166146b57f000000000000000000000000000000000000000000000000000000000000000460016159f9565b83036146bf578391505b600281815481106146d2576146d261599b565b90600052602060002090600502019350809450506145b3565b600481810154908401546fffffffffffffffffffffffffffffffff91821691166000816fffffffffffffffffffffffffffffffff1661475461473f856fffffffffffffffffffffffffffffffff1660011c90565b6fffffffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff16149050801561482357600061478c836fffffffffffffffffffffffffffffffff166150d3565b6fffffffffffffffffffffffffffffffff1611156147f75760006147ce6147c660016fffffffffffffffffffffffffffffffff8616615ccb565b896001615172565b6003810154600490910154909c506fffffffffffffffffffffffffffffffff169a506147fd9050565b6008549a505b600386015460048701549099506fffffffffffffffffffffffffffffffff169750614879565b60006148456147c66fffffffffffffffffffffffffffffffff85166001615cf4565b6003808901546004808b015492840154930154909e506fffffffffffffffffffffffffffffffff9182169d50919b50169850505b505050505050509193509193565b60006fffffffffffffffffffffffffffffffff8416156148f45760408051602081018790526fffffffffffffffffffffffffffffffff8087169282019290925260608101859052908316608082015260a00160405160208183030381529060405280519060200120611900565b82826040516020016149229291909182526fffffffffffffffffffffffffffffffff16602082015260400190565b6040516020818303038152906040528051906020012095945050505050565b6000806149ce847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1690508083036001841b600180831b0386831b17039250505092915050565b60008060008360000151600003614a32576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f8111614a57576000600160009450945094505050614e86565b60b78111614b6d576000614a6c608083615a49565b905080876000015111614aab576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082148015614b2357507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b15614b5a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614e86915050565b60bf8111614ccb576000614b8260b783615a49565b905080876000015111614bc1576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614c23576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614c6b576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614c7581846159f9565b895111614cae576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614cb98360016159f9565b9750955060009450614e869350505050565b60f78111614d30576000614ce060c083615a49565b905080876000015111614d1f576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614e86915050565b6000614d3d60f783615a49565b905080876000015111614d7c576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614dde576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614e26576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e3081846159f9565b895111614e69576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614e748360016159f9565b9750955060019450614e869350505050565b9193909250565b60608167ffffffffffffffff811115614ea857614ea86158cf565b6040519080825280601f01601f191660200182016040528015614ed2576020820181803683370190505b5090508115614f1b576000614ee784866159f9565b90506020820160005b84811015614f08578281015182820152602001614ef0565b84811115614f17576000858301525b5050505b9392505050565b6000614f416fffffffffffffffffffffffffffffffff84166001615cf4565b90506000614f5182866001615172565b9050600086901a838061503d5750614f8a60027f0000000000000000000000000000000000000000000000000000000000000004615cb7565b600483015460029061502e906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6150389190615dce565b60ff16145b156150955760ff811660011480615057575060ff81166002145b615090576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b612a00565b60ff811615612a00576040517ff40239db00000000000000000000000000000000000000000000000000000000815260048101889052602401613626565b600080615160837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600160ff919091161b90920392915050565b600080826151bb576151b66fffffffffffffffffffffffffffffffff86167f0000000000000000000000000000000000000000000000000000000000000004615285565b6151d6565b6151d6856fffffffffffffffffffffffffffffffff16615411565b9050600284815481106151eb576151eb61599b565b906000526020600020906005020191505b60048201546fffffffffffffffffffffffffffffffff82811691161461524e57815460028054909163ffffffff169081106152395761523961599b565b906000526020600020906005020191506151fc565b509392505050565b60008060008060006152678661447e565b935093509350935061527b84848484614887565b9695505050505050565b600081615324846fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff161161533a5763b34b5c226000526004601cfd5b61534383615411565b9050816153e2826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff1611613e4957613e466153f88360016159f9565b6fffffffffffffffffffffffffffffffff8316906154b6565b600081196001830116816154a5827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169390931c8015179392505050565b600080615543847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b60ff169050808303600180821b0385821b179250505092915050565b60008083601f84011261557157600080fd5b50813567ffffffffffffffff81111561558957600080fd5b6020830191508360208285010111156155a157600080fd5b9250929050565b600080600083850360a08112156155be57600080fd5b60808112156155cc57600080fd5b50839250608084013567ffffffffffffffff8111156155ea57600080fd5b6155f68682870161555f565b9497909650939450505050565b6000806040838503121561561657600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806000606084860312156156aa57600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b818110156156e7576020818501810151868301820152016156cb565b818111156156f9576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613e4660208301846156c1565b60006020828403121561575157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461577a57600080fd5b50565b60006020828403121561578f57600080fd5b8135614f1b81615758565b803580151581146157aa57600080fd5b919050565b600080600080608085870312156157c557600080fd5b8435935060208501359250604085013591506157e36060860161579a565b905092959194509250565b60006020828403121561580057600080fd5b81356fffffffffffffffffffffffffffffffff81168114614f1b57600080fd5b6000806000806000806080878903121561583957600080fd5b863595506158496020880161579a565b9450604087013567ffffffffffffffff8082111561586657600080fd5b6158728a838b0161555f565b9096509450606089013591508082111561588b57600080fd5b5061589889828a0161555f565b979a9699509497509295939492505050565b63ffffffff8416815282602082015260606040820152600061190060608301846156c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006080828403121561591057600080fd5b6040516080810181811067ffffffffffffffff8211171561595a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115615a0c57615a0c6159ca565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a4257615a426159ca565b5060010190565b600082821015615a5b57615a5b6159ca565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9e57615a9e615a60565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615adb57615adb6159ca565b500290565b600060208284031215615af257600080fd5b8151614f1b81615758565b600060208284031215615b0f57600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015615b3757615b376159ca565b039392505050565b600067ffffffffffffffff80831681851681830481118215151615615b6657615b666159ca565b02949350505050565b60008060408385031215615b8257600080fd5b505080516020909101519092909150565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd457615bd46159ca565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0f57615c0f6159ca565b60008712925087820587128484161615615c2b57615c2b6159ca565b87850587128184161615615c4157615c416159ca565b505050929093029392505050565b600082615c5e57615c5e615a60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615cb257615cb26159ca565b500590565b600082615cc657615cc6615a60565b500690565b60006fffffffffffffffffffffffffffffffff83811690831681811015615b3757615b376159ca565b60006fffffffffffffffffffffffffffffffff808316818516808303821115615d1f57615d1f6159ca565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000615d85606083018789615d28565b8281036020840152615d98818688615d28565b9150508260408301529695505050505050565b600060ff821660ff841680821015615dc557615dc56159ca565b90039392505050565b600060ff831680615de157615de1615a60565b8060ff8416069150509291505056fea164736f6c634300080f000a"; }