60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61500080620000f46000396000f3fe608060405234801561001057600080fd5b50600436106103cf5760003560e01c80638258656a116101ff578063b536818a1161011a578063d2423b51116100ad578063dd6624e41161007c578063dd6624e414610969578063ef5cfb8c1461098a578063f1127ed81461099d578063f7c618c1146109da57600080fd5b8063d2423b51146108f7578063d505accf1461090a578063d547741f1461091d578063dd62ed3e1461093057600080fd5b8063c3cda520116100e9578063c3cda520146108b3578063c89039c5146108c6578063ca15c873146108da578063d1f52983146108ed57600080fd5b8063b536818a14610849578063b8162dd214610870578063c24a0f8b1461089a578063c2ee3a08146108a457600080fd5b80639ab24eb011610192578063a9059cbb11610161578063a9059cbb146107bf578063adf8252d146107d2578063ae22192e146107e5578063b182eb911461082857600080fd5b80639ab24eb014610787578063a16cdbb11461079a578063a217fddf146107a4578063a457c2d7146107ac57600080fd5b80638f2203f6116101ce5780638f2203f6146106fb5780639010d07c1461073357806391d148541461074657806395d89b411461077f57600080fd5b80638258656a146106af578063857184d1146106c25780638dbdbe6d146106d55780638e539e8c146106e857600080fd5b806339509351116102ef5780636fcfff45116102825780637cd0b5c7116102515780637cd0b5c71461065f5780637e245d79146106725780637ecebe001461067c578063804d94261461068f57600080fd5b80636fcfff45146105f157806370a082311461061957806378b4330f146106425780637c516e941461064c57600080fd5b8063587cde1e116102be578063587cde1e1461057257806359974e38146105b75780635c19a95c146105ca57806368570e6a146105dd57600080fd5b806339509351146105385780633a46b1a81461054b57806354c5b6961461055e57806357c2c2ba1461056857600080fd5b8063219f3fb9116103675780632f2ff15d116103365780632f2ff15d146104fb578063313ce5671461050e5780633644e5151461051d57806336568abe1461052557600080fd5b8063219f3fb91461049f57806323b872dd146104b2578063248a9ca3146104c55780632ec19841146104e857600080fd5b8063095ea7b3116103a3578063095ea7b31461043957806310accecc1461044c57806318160ddd1461046d57806318f9e2911461047557600080fd5b8062f714ce146103d457806301ffc9a7146103e957806306fdde0314610411578063070d66bf14610426575b600080fd5b6103e76103e2366004614890565b6109ee565b005b6103fc6103f73660046148d7565b610ca4565b60405190151581526020015b60405180910390f35b610419610ccf565b6040516104089190614c49565b6103e76104343660046148b5565b610d61565b6103fc610447366004614717565b611054565b61045f61045a366004614612565b61106c565b604051908152602001610408565b60cb5461045f565b61045f610483366004614612565b6001600160a01b03166000908152610197602052604090205490565b6103e76104ad3660046149f9565b6110eb565b6103fc6104c0366004614668565b611224565b61045f6104d3366004614877565b60009081526065602052604090206001015490565b6103e76104f6366004614ad6565b611248565b6103e7610509366004614890565b611472565b60405160128152602001610408565b61045f61149c565b6103e7610533366004614890565b6114ab565b6103fc610546366004614717565b611537565b61045f610559366004614717565b611576565b61045f61019d5481565b61045f61019c5481565b61059f610580366004614612565b6001600160a01b03908116600090815261016260205260409020541690565b6040516001600160a01b039091168152602001610408565b6103e76105c5366004614877565b6115f1565b6103e76105d8366004614612565b611616565b61019a5461059f906001600160a01b031681565b6106046105ff366004614612565b611620565b60405163ffffffff9091168152602001610408565b61045f610627366004614612565b6001600160a01b0316600090815260c9602052604090205490565b61045f62278d0081565b6103e761065a366004614901565b611643565b61045f61066d366004614612565b6116d5565b61045f6101955481565b61045f61068a366004614612565b611702565b6106a261069d366004614612565b611721565b6040516104089190614bd8565b6103e76106bd366004614890565b6117cc565b61045f6106d0366004614612565b61190e565b6103e76106e3366004614afd565b611998565b61045f6106f6366004614877565b611bb5565b6107126fffffffffffffffffffffffffffffffff81565b6040516fffffffffffffffffffffffffffffffff9091168152602001610408565b61059f6107413660046148b5565b611c12565b6103fc610754366004614890565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610419611c2a565b61045f610795366004614612565b611c39565b61045f61019e5481565b61045f600081565b6103fc6107ba366004614717565b611cc2565b6103fc6107cd366004614717565b611d6c565b61045f6107e0366004614877565b611d7a565b6107f86107f3366004614717565b611dab565b60408051948552602085019390935267ffffffffffffffff91821692840192909252166060820152608001610408565b61045f610836366004614612565b6101966020526000908152604090205481565b61045f7f0603f2636f0ca34ae3ea5a23bb826e2bd2ffd59fb1c01edc1ba10fba2899d1ba81565b61045f61087e366004614612565b6001600160a01b031660009081526101a0602052604090205490565b61045f61019f5481565b61045f670de0b6b3a764000081565b6103e76108c1366004614743565b611e03565b6101985461059f906001600160a01b031681565b61045f6108e8366004614877565b611f39565b61045f61019b5481565b6103e76109053660046147d4565b611f50565b6103e76109183660046146a9565b612023565b6103e761092b366004614890565b612187565b61045f61093e36600461462f565b6001600160a01b03918216600090815260ca6020908152604080832093909416825291909152205490565b61045f610977366004614612565b6101976020526000908152604090205481565b6103e7610998366004614612565b6121ac565b6109b06109ab36600461479d565b6122ed565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610408565b6101995461059f906001600160a01b031681565b6001600160a01b038116610a1557604051633efa09af60e01b815260040160405180910390fd5b3360009081526101a060205260409020548210610a45576040516306cfc55d60e21b815260040160405180910390fd5b3360009081526101a060205260408120805484908110610a6757610a67614f8e565b60009182526020918290206040805160808101825260039093029091018054835260018101549383019390935260029092015467ffffffffffffffff80821693830193909352600160401b900490911660608201819052909150421015610ae157604051632a28ea7760e21b815260040160405180910390fd5b3360009081526101a0602052604090208054610aff90600190614e6f565b81548110610b0f57610b0f614f8e565b90600052602060002090600302016101a06000610b293390565b6001600160a01b03166001600160a01b031681526020019081526020016000208481548110610b5a57610b5a614f8e565b60009182526020808320845460039390930201918255600180850154908301556002938401805494909201805467ffffffffffffffff95861667ffffffffffffffff1982168117835593546fffffffffffffffffffffffffffffffff19909116909317600160401b938490049095169092029390931790553381526101a090915260409020805480610bee57610bee614f78565b600082815260208120600360001990930192830201818155600181019190915560020180546fffffffffffffffffffffffffffffffff191690559055610c3e610c343390565b8260200151612372565b805161019854610c5b916001600160a01b0390911690849061238e565b805160405190815233906001600160a01b0384169085907fe5df19de43c8c04fd192bc68e484b2593570925fbb6ad8c07ccafbc2aa5c37a19060200160405180910390a4505050565b60006001600160e01b03198216635a05180f60e01b1480610cc95750610cc9826123f1565b92915050565b606060cc8054610cde90614ec9565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0a90614ec9565b8015610d575780601f10610d2c57610100808354040283529160200191610d57565b820191906000526020600020905b815481529060010190602001808311610d3a57829003601f168201915b5050505050905090565b80610d7f57604051631d9b07f160e31b815260040160405180910390fd5b3360009081526101a060205260408120805484908110610da157610da1614f8e565b60009182526020918290206040805160808101825260039093029091018054835260018101549383019390935260029092015467ffffffffffffffff80821693830193909352600160401b9004909116606082018190529091504210610e1a57604051630dda7bd560e31b815260040160405180910390fd5b6000610e298362278d00612426565b90506000610e5f8242856060015167ffffffffffffffff16610e4b9190614e6f565b610e559190614d63565b61019e549061243c565b61019f54909150610e704283614d63565b1115610ea15761019f54600090610e874284614d63565b610e919190614e6f565b9050610e9d8183614e6f565b9150505b6000670de0b6b3a7640000610eb583611d7a565b8551610ec19190614e50565b610ecb9190614da7565b905083602001518110610f2e573360009081526101a060205260409020805482919088908110610efd57610efd614f8e565b6000918252602090912060016003909202010155610f29336020860151610f249084614e6f565b61244b565b610f47565b60405163acf4257d60e01b815260040160405180910390fd5b3360009081526101a060205260409020805442919088908110610f6c57610f6c614f8e565b60009182526020909120600390910201600201805467ffffffffffffffff191667ffffffffffffffff92909216919091179055610fa98242614d7b565b3360009081526101a060205260409020805488908110610fcb57610fcb614f8e565b906000526020600020906003020160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506110093390565b6001600160a01b0316867faf206878070db16635143d5cd56a51ccd35bc26f7bdb3cd4e55e42673cd95ffa8760405161104491815260200190565b60405180910390a3505050505050565b60003361106281858561246b565b5060019392505050565b6001600160a01b03811660009081526101966020526040812054610194546fffffffffffffffffffffffffffffffff916110db916110cc906110b99087908015614503021763ffffffff16565b610195546110c79190614e50565b61258f565b6110d69190614d23565b612612565b610cc99190614da7565b60cb5490565b600054610100900460ff161580801561110b5750600054600160ff909116105b806111255750303b158015611125575060005460ff166001145b61119c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff1916600117905580156111bf576000805461ff0019166101001790555b6111d18b8b8b8b8b8b8b8b8b8b612664565b8015611217576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b60003361123285828561273b565b61123d8585856127c7565b506001949350505050565b8061126657604051636e0ccc0760e01b815260040160405180910390fd5b6001600160a01b03821660009081526101a06020526040812080548590811061129157611291614f8e565b60009182526020918290206040805160808101825260039093029091018054835260018101549383019390935260029092015467ffffffffffffffff80821693830193909352600160401b900490911660608201819052909150421061130a57604051630dda7bd560e31b815260040160405180910390fd5b600042826060015167ffffffffffffffff166113269190614e6f565b90506000670de0b6b3a764000061133c83611d7a565b6113469086614e50565b6113509190614da7565b6001600160a01b03861660009081526101a060205260409020805491925085918890811061138057611380614f8e565b906000526020600020906003020160000160008282546113a09190614d63565b90915550506001600160a01b03851660009081526101a0602052604090208054829190889081106113d3576113d3614f8e565b906000526020600020906003020160010160008282546113f39190614d63565b909155506114039050858261244b565b61141c33610198546001600160a01b031690308761280f565b336001600160a01b0316856001600160a01b0316877f0b1890568b4822f18e4a3841bcdeaa194c4fb411df05b823eada5bf88326c75f8760405161146291815260200190565b60405180910390a4505050505050565b60008281526065602052604090206001015461148d81612847565b6114978383612851565b505050565b60006114a6612873565b905090565b6001600160a01b03811633146115295760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401611193565b61153382826128ee565b5050565b33600081815260ca602090815260408083206001600160a01b03871684529091528120549091906110629082908690611571908790614d63565b61246b565b60004382106115c75760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401611193565b6001600160a01b0383166000908152610163602052604090206115ea9083612910565b9392505050565b6115fa81612a07565b61161333610199546001600160a01b031690308461280f565b50565b6116133382612ac9565b6001600160a01b03811660009081526101636020526040812054610cc990612b51565b60405163d505accf60e01b81526001600160a01b0388811660048301528781166024830152604482018790526064820186905260ff8516608483015260a4820184905260c4820183905289169063d505accf9060e401600060405180830381600087803b1580156116b357600080fd5b505af11580156116c7573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038116600090815261019760205260408120546116f88361106c565b610cc99190614e6f565b6001600160a01b038116600090815261012f6020526040812054610cc9565b6001600160a01b03811660009081526101a060209081526040808320805482518185028101850190935280835260609492939192909184015b828210156117c15760008481526020908190206040805160808101825260038602909201805483526001808201548486015260029091015467ffffffffffffffff80821693850193909352600160401b90049091166060830152908352909201910161175a565b505050509050919050565b6001600160a01b03811660009081526101a060205260409020548210611805576040516306cfc55d60e21b815260040160405180910390fd5b6001600160a01b03811660009081526101a06020526040812080548490811061183057611830614f8e565b60009182526020918290206040805160808101825260039093029091018054835260018101549383019390935260029092015467ffffffffffffffff80821693830193909352600160401b9004909116606082018190529091504210156118aa57604051632a28ea7760e21b815260040160405180910390fd5b6118c782826000015183602001516118c29190614e6f565b612372565b80516001600160a01b03831660009081526101a0602052604090208054859081106118f4576118f4614f8e565b906000526020600020906003020160010181905550505050565b60008060005b6001600160a01b03841660009081526101a06020526040902054811015611991576001600160a01b03841660009081526101a06020526040902080548290811061196057611960614f8e565b9060005260206000209060030201600001548261197d9190614d63565b91508061198981614efe565b915050611914565b5092915050565b61019f546119a962278d0042614d63565b11156119c857604051632edafac960e11b815260040160405180910390fd5b826119e657604051636e0ccc0760e01b815260040160405180910390fd5b60006119fe61019e548461243c90919063ffffffff16565b9050611a0d8162278d00612426565b61019f54909150611a1e4283614d63565b1115611a4f5761019f54600090611a354284614d63565b611a3f9190614e6f565b9050611a4b8183614e6f565b9150505b6000670de0b6b3a7640000611a6383611d7a565b611a6d9087614e50565b611a779190614da7565b90506101a06000846001600160a01b03166001600160a01b0316815260200190815260200160002060405180608001604052808781526020018381526020014267ffffffffffffffff1681526020018442611ad29190614d7b565b67ffffffffffffffff9081169091528254600181810185556000948552602094859020845160039093020191825593830151938101939093556040820151600290930180546060909301518216600160401b026fffffffffffffffffffffffffffffffff199093169390911692909217179055611b4f838261244b565b611b6833610198546001600160a01b031690308861280f565b604080518681526020810184905233916001600160a01b038616917f34194be2f096bdb2ad418add902a4da76d3d6f6d387d86d857f56c7711ecca70910160405180910390a35050505050565b6000438210611c065760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401611193565b610cc961016483612910565b60008281526097602052604081206115ea9083612bcd565b606060cd8054610cde90614ec9565b6001600160a01b038116600090815261016360205260408120548015611caf576001600160a01b038316600090815261016360205260409020611c7d600183614e6f565b81548110611c8d57611c8d614f8e565b60009182526020909120015464010000000090046001600160e01b0316611cb2565b60005b6001600160e01b03169392505050565b33600081815260ca602090815260408083206001600160a01b038716845290915281205490919083811015611d5f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401611193565b61123d828686840361246b565b6000336110628185856127c7565b600061019e548261019d54611d8f9190614e50565b611d999190614da7565b610cc990670de0b6b3a7640000614d63565b6101a06020528160005260406000208181548110611dc857600080fd5b600091825260209091206003909102018054600182015460029092015490935090915067ffffffffffffffff80821691600160401b90041684565b83421115611e535760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401611193565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090611ecd90611ec59060a00160405160208183030381529060405280519060200120612bd9565b858585612c27565b9050611ed881612c51565b8614611f265760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401611193565b611f308188612ac9565b50505050505050565b6000818152609760205260408120610cc990612c7a565b60005b8281101561201d5760008030868685818110611f7157611f71614f8e565b9050602002810190611f839190614c7c565b604051611f91929190614b2b565b600060405180830381855af49150503d8060008114611fcc576040519150601f19603f3d011682016040523d82523d6000602084013e611fd1565b606091505b509150915081158015611fe15750835b1561200857611fef81612c84565b60405162461bcd60e51b81526004016111939190614c49565b5050808061201590614efe565b915050611f53565b50505050565b834211156120735760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401611193565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886120a28c612c51565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006120fd82612bd9565b9050600061210d82878787612c27565b9050896001600160a01b0316816001600160a01b0316146121705760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401611193565b61217b8a8a8a61246b565b50505050505050505050565b6000828152606560205260409020600101546121a281612847565b61149783836128ee565b60006121b733612ce3565b90506000670de0b6b3a764000061019b54836121d39190614e50565b6121dd9190614da7565b905060006121eb8284614e6f565b90508115801590612207575061019a546001600160a01b031615155b156122805761019a5461019c54604051638dbdbe6d60e01b81526004810185905260248101919091526001600160a01b03868116604483015290911690638dbdbe6d90606401600060405180830381600087803b15801561226757600080fd5b505af115801561227b573d6000803e3d6000fd5b505050505b60018111156122a157610199546122a1906001600160a01b0316858361238e565b60408051838152602081018390526001600160a01b0386169133917fd92c424393cb3ccdf7d5e36602e3bfa34f24490579ba47978f4bcfad496995f2910160405180910390a350505050565b60408051808201909152600080825260208201526001600160a01b038316600090815261016360205260409020805463ffffffff841690811061233257612332614f8e565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b61237c8282612d7a565b611533826123898361258f565b612d93565b6040516001600160a01b03831660248201526044810182905261149790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612de6565b60006001600160e01b03198216637965db0b60e01b1480610cc957506301ffc9a760e01b6001600160e01b0319831614610cc9565b600081831161243557816115ea565b5090919050565b600081831061243557816115ea565b6124558282612ecb565b611533826124628361258f565b61238990614f19565b6001600160a01b0383166124cd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611193565b6001600160a01b03821661252e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611193565b6001600160a01b03838116600081815260ca602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160ff1b0382111561260e5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e206160448201527f6e20696e743235360000000000000000000000000000000000000000000000006064820152608401611193565b5090565b60008082121561260e5760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401611193565b600054610100900460ff166126cf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401611193565b6126de8a8a8a8a8a8a8a612f63565b62278d0082101561270257604051633b3f7cd160e21b815260040160405180910390fd5b61019d8390554281101561272957604051632edafac960e11b815260040160405180910390fd5b61019f5561019e555050505050505050565b6001600160a01b03838116600090815260ca6020908152604080832093861683529290522054600019811461201d57818110156127ba5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611193565b61201d848484840361246b565b60405162461bcd60e51b815260206004820152601060248201527f4e4f4e5f5452414e5346455241424c45000000000000000000000000000000006044820152606401611193565b6040516001600160a01b038085166024830152831660448201526064810182905261201d9085906323b872dd60e01b906084016123ba565b6116138133613112565b61285b8282613187565b60008281526097602052604090206114979082613229565b60006114a67f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6128a260fb5490565b60fc546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6128f8828261323e565b600082815260976020526040902061149790826132c1565b81546000908181600581111561296a57600061292b846132d6565b6129359085614e6f565b600088815260209020909150869082015463ffffffff16111561295a57809150612968565b612965816001614d63565b92505b505b808210156129b757600061297e83836133bb565b600088815260209020909150869082015463ffffffff1611156129a3578091506129b1565b6129ae816001614d63565b92505b5061296a565b80156129f1576129da866129cc600184614e6f565b600091825260209091200190565b5464010000000090046001600160e01b03166129f4565b60005b6001600160e01b03169695505050505050565b6000612a3361019460089054906101000a90048015614503021767ffffffffffffffff1663ffffffff16565b905080612a53576040516330dbaf5560e11b815260040160405180910390fd5b81156115335780612a746fffffffffffffffffffffffffffffffff84614e50565b612a7e9190614da7565b61019554612a8c9190614d63565b6101955560405182815233907fdf29796aad820e4bb192f3a8d631b76519bcd2cbe77cc85af20e9df53cece0869060200160405180910390a25050565b6001600160a01b03828116600081815261016260208181526040808420805460c98452828620549490935287871673ffffffffffffffffffffffffffffffffffffffff198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461201d8284836133d6565b600063ffffffff82111561260e5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f32206269747300000000000000000000000000000000000000000000000000006064820152608401611193565b60006115ea8383613515565b6000610cc9612be6612873565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000612c388787878761353f565b91509150612c4581613603565b5090505b949350505050565b6001600160a01b038116600090815261012f602052604090208054600181018255905b50919050565b6000610cc9825490565b6060604482511015612cc957505060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c79000000602082015290565b60048201915081806020019051810190610cc99190614982565b600080612cef836116d5565b90508015610cc9576001600160a01b03831660009081526101976020526040902054612d1c908290614d63565b6001600160a01b03841660008181526101976020526040908190209290925590517f8a43c4352486ec339f487f64af78ca5cbf06cd47833f073d3baf3a193e50316190612d6c9084815260200190565b60405180910390a292915050565b612d848282613751565b61201d61016461388c83613898565b61019554612da19082614dc9565b6001600160a01b03831660009081526101966020526040902054612dc59190614d23565b6001600160a01b039092166000908152610196602052604090209190915550565b6000612e3b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139ec9092919063ffffffff16565b8051909150156114975780806020019051810190612e59919061485a565b6114975760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401611193565b612ed582826139fb565b60cb546001600160e01b031015612f545760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f746573000000000000000000000000000000006064820152608401611193565b61201d610164613ac483613898565b600054610100900460ff16612fce5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401611193565b612fd787613ad0565b612fe18787613b5e565b612fef6106276110e5613bd3565b612ffa600033613c7a565b613002613c84565b670de0b6b3a764000082111561302b57604051635a2a1cf160e01b815260040160405180910390fd5b6001600160a01b0385166130515760405162f1038960e81b815260040160405180910390fd5b6001600160a01b0383161580156130685750600082115b1561308657604051631b739ea960e11b815260040160405180910390fd5b61019880546001600160a01b0380881673ffffffffffffffffffffffffffffffffffffffff19928316179092556101998054878416908316811790915561019a80549387169390921692909217905561019b83905561019c829055158015906130f757506001600160a01b03831615155b15611f3057611f306001600160a01b03851684600019613cf1565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166115335761314581613e1c565b613150836020613e2e565b604051602001613161929190614b57565b60408051601f198184030181529082905262461bcd60e51b825261119391600401614c49565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166115335760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556131e53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006115ea836001600160a01b038416613fd7565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16156115335760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006115ea836001600160a01b038416614026565b6000816132e557506000919050565b600060016132f284614119565b901c6001901b9050600181848161330b5761330b614f4c565b048201901c9050600181848161332357613323614f4c565b048201901c9050600181848161333b5761333b614f4c565b048201901c9050600181848161335357613353614f4c565b048201901c9050600181848161336b5761336b614f4c565b048201901c9050600181848161338357613383614f4c565b048201901c9050600181848161339b5761339b614f4c565b048201901c90506115ea818285816133b5576133b5614f4c565b0461243c565b60006133ca6002848418614da7565b6115ea90848416614d63565b816001600160a01b0316836001600160a01b0316141580156133f85750600081115b15611497576001600160a01b03831615613487576001600160a01b03831660009081526101636020526040812081906134349061388c85613898565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161347c929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611497576001600160a01b03821660009081526101636020526040812081906134be90613ac485613898565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051613506929190918252602082015260400190565b60405180910390a25050505050565b600082600001828154811061352c5761352c614f8e565b9060005260206000200154905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561357657506000905060036135fa565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156135ca573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166135f3576000600192509250506135fa565b9150600090505b94509492505050565b600081600481111561361757613617614f62565b14156136205750565b600181600481111561363457613634614f62565b14156136825760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611193565b600281600481111561369657613696614f62565b14156136e45760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611193565b60038160048111156136f8576136f8614f62565b14156116135760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611193565b6001600160a01b0382166137b15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611193565b6001600160a01b038216600090815260c96020526040902054818110156138255760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611193565b6001600160a01b038316600081815260c960209081526040808320868603905560cb80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611497836000846141ad565b60006115ea8284614e6f565b825460009081908181156138e5576138b5876129cc600185614e6f565b60408051808201909152905463ffffffff8116825264010000000090046001600160e01b031660208201526138fa565b60408051808201909152600080825260208201525b905080602001516001600160e01b0316935061391a84868863ffffffff16565b92506000821180156139325750805163ffffffff1643145b1561397757613940836141e0565b61394f886129cc600186614e6f565b80546001600160e01b03929092166401000000000263ffffffff9092169190911790556139e2565b86604051806040016040528061398c43612b51565b63ffffffff1681526020016139a0866141e0565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b6060612c49848460008561425f565b6001600160a01b038216613a515760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611193565b8060cb6000828254613a639190614d63565b90915550506001600160a01b038216600081815260c960209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611533600083836141ad565b60006115ea8284614d63565b600054610100900460ff16613b3b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401611193565b61161381604051806040016040528060018152602001603160f81b815250614351565b600054610100900460ff16613bc95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401611193565b61153382826143d6565b600054610100900460ff16613c3e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401611193565b610194805467ffffffffffffffff928316600160401b026fffffffffffffffffffffffffffffffff199091169290931691909117919091179055565b6115338282612851565b600054610100900460ff16613cef5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401611193565b565b801580613d7a5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b158015613d4057600080fd5b505afa158015613d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d789190614abd565b155b613dec5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401611193565b6040516001600160a01b03831660248201526044810182905261149790849063095ea7b360e01b906064016123ba565b6060610cc96001600160a01b03831660145b60606000613e3d836002614e50565b613e48906002614d63565b67ffffffffffffffff811115613e6057613e60614fa4565b6040519080825280601f01601f191660200182016040528015613e8a576020820181803683370190505b509050600360fc1b81600081518110613ea557613ea5614f8e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613ed457613ed4614f8e565b60200101906001600160f81b031916908160001a9053506000613ef8846002614e50565b613f03906001614d63565b90505b6001811115613f88577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613f4457613f44614f8e565b1a60f81b828281518110613f5a57613f5a614f8e565b60200101906001600160f81b031916908160001a90535060049490941c93613f8181614eb2565b9050613f06565b5083156115ea5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401611193565b600081815260018301602052604081205461401e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610cc9565b506000610cc9565b6000818152600183016020526040812054801561410f57600061404a600183614e6f565b855490915060009061405e90600190614e6f565b90508181146140c357600086600001828154811061407e5761407e614f8e565b90600052602060002001549050808760000184815481106140a1576140a1614f8e565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806140d4576140d4614f78565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610cc9565b6000915050610cc9565b600080608083901c1561412e57608092831c92015b604083901c1561414057604092831c92015b602083901c1561415257602092831c92015b601083901c1561416457601092831c92015b600883901c1561417657600892831c92015b600483901c1561418857600492831c92015b600283901c1561419a57600292831c92015b600183901c15610cc95760010192915050565b6001600160a01b0383811660009081526101626020526040808220548584168352912054611497929182169116836133d6565b60006001600160e01b0382111561260e5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f32342062697473000000000000000000000000000000000000000000000000006064820152608401611193565b6060824710156142d75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401611193565b600080866001600160a01b031685876040516142f39190614b3b565b60006040518083038185875af1925050503d8060008114614330576040519150601f19603f3d011682016040523d82523d6000602084013e614335565b606091505b509150915061434687838387614468565b979650505050505050565b600054610100900460ff166143bc5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401611193565b81516020928301208151919092012060fb9190915560fc55565b600054610100900460ff166144415760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401611193565b81516144549060cc90602085019061450b565b5080516114979060cd90602084019061450b565b606083156144d45782516144cd576001600160a01b0385163b6144cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611193565b5081612c49565b612c4983838151156144e95781518083602001fd5b8060405162461bcd60e51b81526004016111939190614c49565b613cef614fba565b82805461451790614ec9565b90600052602060002090601f016020900481019282614539576000855561457f565b82601f1061455257805160ff191683800117855561457f565b8280016001018555821561457f579182015b8281111561457f578251825591602001919060010190614564565b5061260e9291505b8082111561260e5760008155600101614587565b80356145a681614fd0565b919050565b600082601f8301126145bc57600080fd5b81356145cf6145ca82614cfb565b614cca565b8181528460208386010111156145e457600080fd5b816020850160208301376000918101602001919091529392505050565b803560ff811681146145a657600080fd5b60006020828403121561462457600080fd5b81356115ea81614fd0565b6000806040838503121561464257600080fd5b823561464d81614fd0565b9150602083013561465d81614fd0565b809150509250929050565b60008060006060848603121561467d57600080fd5b833561468881614fd0565b9250602084013561469881614fd0565b929592945050506040919091013590565b600080600080600080600060e0888a0312156146c457600080fd5b87356146cf81614fd0565b965060208801356146df81614fd0565b955060408801359450606088013593506146fb60808901614601565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561472a57600080fd5b823561473581614fd0565b946020939093013593505050565b60008060008060008060c0878903121561475c57600080fd5b863561476781614fd0565b9550602087013594506040870135935061478360608801614601565b92506080870135915060a087013590509295509295509295565b600080604083850312156147b057600080fd5b82356147bb81614fd0565b9150602083013563ffffffff8116811461465d57600080fd5b6000806000604084860312156147e957600080fd5b833567ffffffffffffffff8082111561480157600080fd5b818601915086601f83011261481557600080fd5b81358181111561482457600080fd5b8760208260051b850101111561483957600080fd5b6020928301955093505084013561484f81614fe5565b809150509250925092565b60006020828403121561486c57600080fd5b81516115ea81614fe5565b60006020828403121561488957600080fd5b5035919050565b600080604083850312156148a357600080fd5b82359150602083013561465d81614fd0565b600080604083850312156148c857600080fd5b50508035926020909101359150565b6000602082840312156148e957600080fd5b81356001600160e01b0319811681146115ea57600080fd5b600080600080600080600080610100898b03121561491e57600080fd5b883561492981614fd0565b9750602089013561493981614fd0565b9650604089013561494981614fd0565b9550606089013594506080890135935061496560a08a01614601565b925060c0890135915060e089013590509295985092959890939650565b60006020828403121561499457600080fd5b815167ffffffffffffffff8111156149ab57600080fd5b8201601f810184136149bc57600080fd5b80516149ca6145ca82614cfb565b8181528560208385010111156149df57600080fd5b6149f0826020830160208601614e86565b95945050505050565b6000806000806000806000806000806101408b8d031215614a1957600080fd5b8a3567ffffffffffffffff80821115614a3157600080fd5b614a3d8e838f016145ab565b9b5060208d0135915080821115614a5357600080fd5b50614a608d828e016145ab565b995050614a6f60408c0161459b565b9750614a7d60608c0161459b565b9650614a8b60808c0161459b565b999c989b50969995989760a0870135975060c08701359660e08101359650610100810135955061012001359350915050565b600060208284031215614acf57600080fd5b5051919050565b600080600060608486031215614aeb57600080fd5b83359250602084013561469881614fd0565b600080600060608486031215614b1257600080fd5b8335925060208401359150604084013561484f81614fd0565b8183823760009101908152919050565b60008251614b4d818460208701614e86565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614b8f816017850160208801614e86565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351614bcc816028840160208801614e86565b01602801949350505050565b602080825282518282018190526000919060409081850190868401855b82811015614c3c5781518051855286810151878601528581015167ffffffffffffffff90811687870152606091820151169085015260809093019290850190600101614bf5565b5091979650505050505050565b6020815260008251806020840152614c68816040850160208701614e86565b601f01601f19169190910160400192915050565b6000808335601e19843603018112614c9357600080fd5b83018035915067ffffffffffffffff821115614cae57600080fd5b602001915036819003821315614cc357600080fd5b9250929050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614cf357614cf3614fa4565b604052919050565b600067ffffffffffffffff821115614d1557614d15614fa4565b50601f01601f191660200190565b6000808212826001600160ff1b0303841381151615614d4457614d44614f36565b600160ff1b8390038412811615614d5d57614d5d614f36565b50500190565b60008219821115614d7657614d76614f36565b500190565b600067ffffffffffffffff808316818516808303821115614d9e57614d9e614f36565b01949350505050565b600082614dc457634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160ff1b03600084136000841385830485118282161615614df157614df1614f36565b600160ff1b6000871282811687830589121615614e1057614e10614f36565b60008712925087820587128484161615614e2c57614e2c614f36565b87850587128184161615614e4257614e42614f36565b505050929093029392505050565b6000816000190483118215151615614e6a57614e6a614f36565b500290565b600082821015614e8157614e81614f36565b500390565b60005b83811015614ea1578181015183820152602001614e89565b8381111561201d5750506000910152565b600081614ec157614ec1614f36565b506000190190565b600181811c90821680614edd57607f821691505b60208210811415612c7457634e487b7160e01b600052602260045260246000fd5b6000600019821415614f1257614f12614f36565b5060010190565b6000600160ff1b821415614f2f57614f2f614f36565b5060000390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052605160045260246000fd5b6001600160a01b038116811461161357600080fd5b801515811461161357600080fdfea164736f6c6343000807000a