LLVM-Based JIT Compiler for CRuby

LLVM-Based JIT Compiler for CRuby

RubyKaigi 2017 Lightning Talk
http://rubykaigi.org/2017

08d5432a5bc31e6d9edec87b94cb1db1?s=128

Takashi Kokubun

September 19, 2017
Tweet

Transcript

  1. --7.#BTFE+*5$PNQJMFSGPS$3VCZ 5BLBTIJ,PLVCVO5SFBTVSF%BUB*OD 4FQUFNCFSUI  3VCZ,BJHJ-JHIUOJOH5BML

  2. TFMG w!LLVCVO w5SFBTVSF%BUB*OD w3VCZDPNNJUUFS NBJOUBJOJOH&3# w"VUIPSPG)BNMJU NBJOUBJOJOH)BNM

  3. %PZPVSFNFNCFS UIF3VCZ,BJHJ,FZOPUF

  4. None
  5. w$POWFSU3VCZDPSFMJCSBSZUP--7.CJUDPEFVTJOH$MBOH w(FOFSBUF--7.*3GSPN:"37CZUFDPEF w"MMPX--7.UPPQUJNJ[FUIFNUPHFUIFS l-JGUUIF$PSFz

  6. *TUIJTQPTTJCMF

  7. :FT XJUI--3# IUUQTHJUIVCDPNLLVCVOMMSC

  8. 8IBU`T--3# w .ZIPCCZFYQFSJNFOUBMQSPKFDUUPJNQMFNFOU+*5DPNQJMFSGPS$3VCZ w *NQMFNFOUJOHVOGBNJMJBSUIJOHTJTGVO w "OEJU`THPPEGPSVOEFSTUBOEJOHJOUFSOBMT w #VJMUBT$FYUFOTJPO XJUI--7.

  9. 8IBUEPFT--3#EP HFNJOTUBMMMMSC

  10. 8IBUEPFT--3#EP HFNJOTUBMMMMSC $3VCZ`T$GVODUJPOGPS 7.JOTO JOTOTEFG  MMSC@JOTO@PQU@QMVTD

  11. 8IBUEPFT--3#EP HFNJOTUBMMMMSC FYUDPOGSCEPFT $3VCZ`T$GVODUJPOGPS 7.JOTO JOTOTEFG  MMSC@JOTO@PQU@QMVTD --7.*3 MMSC@JOTO@PQU@QMVTMM

    DMBOH0 FNJUMMWN
  12. 8IBUEPFT--3#EP HFNJOTUBMMMMSC FYUDPOGSCEPFT $3VCZ`T$GVODUJPOGPS 7.JOTO JOTOTEFG  MMSC@JOTO@PQU@QMVTD --7.*3 MMSC@JOTO@PQU@QMVTMM

    --7.CJUDPEF MMSC@JOTO@PQU@QMVTCD DMBOH0 FNJUMMWN MMWNBT
  13. 8IBUEPFT--3#EP HFNJOTUBMMMMSC FYUDPOGSCEPFT $3VCZ`T$GVODUJPOGPS 7.JOTO JOTOTEFG  MMSC@JOTO@PQU@QMVTD --7.*3 MMSC@JOTO@PQU@QMVTMM

    --7.CJUDPEF MMSC@JOTO@PQU@QMVTCD DMBOH0 FNJUMMWN MMWNBT SVCZSMMSCTUBSUʜ
  14. 8IBUEPFT--3#EP HFNJOTUBMMMMSC FYUDPOGSCEPFT $3VCZ`T$GVODUJPOGPS 7.JOTO JOTOTEFG  MMSC@JOTO@PQU@QMVTD --7.*3 MMSC@JOTO@PQU@QMVTMM

    --7.CJUDPEF MMSC@JOTO@PQU@QMVTCD DMBOH0 FNJUMMWN MMWNBT *OJU@MMSCJOWPLFT TUBDLQSPGMJLFQSPpMFS TFUJUJNFS  *5*.&3@130' SC@QPTUQPOFE@KPC@SFHJTUFS@POF SVCZSMMSCTUBSUʜ
  15. 8IBUEPFT--3#EP HFNJOTUBMMMMSC FYUDPOGSCEPFT $3VCZ`T$GVODUJPOGPS 7.JOTO JOTOTEFG  MMSC@JOTO@PQU@QMVTD --7.*3 MMSC@JOTO@PQU@QMVTMM

    --7.CJUDPEF MMSC@JOTO@PQU@QMVTCD DMBOH0 FNJUMMWN MMWNBT *OJU@MMSCJOWPLFT TUBDLQSPGMJLFQSPpMFS TFUJUJNFS  *5*.&3@130' SC@QPTUQPOFE@KPC@SFHJTUFS@POF 3VCZ`T CZUFDPEF PGIPUTQPU %FUFDU GSFRVFOUMZ DBMMFE*4FR SVCZSMMSCTUBSUʜ
  16. 8IBUEPFT--3#EP HFNJOTUBMMMMSC FYUDPOGSCEPFT $3VCZ`T$GVODUJPOGPS 7.JOTO JOTOTEFG  MMSC@JOTO@PQU@QMVTD --7.*3 MMSC@JOTO@PQU@QMVTMM

    --7.CJUDPEF MMSC@JOTO@PQU@QMVTCD DMBOH0 FNJUMMWN MMWNBT *OJU@MMSCJOWPLFT TUBDLQSPGMJLFQSPpMFS TFUJUJNFS  *5*.&3@130' SC@QPTUQPOFE@KPC@SFHJTUFS@POF 3VCZ`T CZUFDPEF PGIPUTQPU %FUFDU GSFRVFOUMZ DBMMFE*4FR --7.*3 PGIPUTQPU --3#`T $PNQJMFS SVCZSMMSCTUBSUʜ
  17. 8IBUEPFT--3#EP HFNJOTUBMMMMSC FYUDPOGSCEPFT $3VCZ`T$GVODUJPOGPS 7.JOTO JOTOTEFG  MMSC@JOTO@PQU@QMVTD --7.*3 MMSC@JOTO@PQU@QMVTMM

    --7.CJUDPEF MMSC@JOTO@PQU@QMVTCD DMBOH0 FNJUMMWN MMWNBT *OJU@MMSCJOWPLFT TUBDLQSPGMJLFQSPpMFS TFUJUJNFS  *5*.&3@130' SC@QPTUQPOFE@KPC@SFHJTUFS@POF 3VCZ`T CZUFDPEF PGIPUTQPU %FUFDU GSFRVFOUMZ DBMMFE*4FR --7.*3 PGIPUTQPU --3#`T $PNQJMFS $GVODUJPO JOQPJOUFS --7.1BTT JOMJOFT$ GVODUJPO --7. SVCZSMMSCTUBSUʜ
  18. 8IBUEPFT--3#EP HFNJOTUBMMMMSC FYUDPOGSCEPFT SVCZSMMSCTUBSUʜ $3VCZ`T$GVODUJPOGPS 7.JOTO JOTOTEFG  MMSC@JOTO@PQU@QMVTD --7.*3

    MMSC@JOTO@PQU@QMVTMM --7.CJUDPEF MMSC@JOTO@PQU@QMVTCD DMBOH0 FNJUMMWN MMWNBT *OJU@MMSCJOWPLFT TUBDLQSPGMJLFQSPpMFS TFUJUJNFS  *5*.&3@130' SC@QPTUQPOFE@KPC@SFHJTUFS@POF 3VCZ`T CZUFDPEF PGIPUTQPU %FUFDU GSFRVFOUMZ DBMMFE*4FR --7.*3 PGIPUTQPU --3#`T $PNQJMFS $GVODUJPO JOQPJOUFS --7.1BTT JOMJOFT$ GVODUJPO 3FQMBDFCZUFDPEF UPUIFPOFUIBUVTFT UIJT$GVODUJPO
  19. *UXPSLT

  20. )PXJTJUTQFSGPSNBODF

  21. -FU`TCFODINBSL CN@MPPQ@XIJMFMPPQ

  22. #PPN

  23. 8IZJT--3#GBTU w $VSSFOUTUBUVT*OMJOJOHJTPOMZBQQMJFEUPDPSF7.JOTUSVDUJPOT w "OEUIFCFODINBSLJTDIPTFOGPSJU w #VUUIFJEFBDBOCFBQQMJFEUPBMMPUIFSQBSUT  w --3#EPFTOPXPSLGPSPQUJNJ[BUJPO

    JUDPOWFSUT3VCZCZUFDPEFUP --7.*3 BOEKVTUMFUT--7.PQUJNJ[FJU
  24. )PXEPFT--7.NBLF--3#GBTU

  25. "CPVU--7.1BTT w l--7.1BTTzJTBGSBNFXPSLUPBOBMZ[FPSPQUJNJ[F--7.*3 w $PNQJMFSPQUJNJ[BUJPOPG$MBOH--7.JTEPOFJO--7.1BTT

  26. --3#`T1BTTQJQFMJOF w --3#JTVTJOH--7.`TEFGBVMU1BTTQJQFMJOFGPS0 1BTTFT w 'PSDF'VODUJPO"UUST-FHBDZ1BTT w 5ZQF#BTFE""8SBQQFS1BTT w 4DPQFE/P"MJBT""8SBQQFS1BTT

    w *OGFS'VODUJPO"UUST-FHBDZ1BTT w *14$$11BTT w (MPCBM0QUJNJ[FS1BTT w 1SPNPUF.FNPSZ5P3FHJTUFS1BTT w %FBE"SH&MJNJOBUJPO1BTT w *OTUSVDUJPO$PNCJOJOH1BTT w $'(4JNQMJpDBUJPO1BTT w (MPCBMT""8SBQQFS1BTT w 1SVOF&)1BTT w 'VODUJPO*OMJOJOH1BTT w 1PTU0SEFS'VODUJPO"UUST1BTT w "SHVNFOU1SPNPUJPO1BTT w 430"1BTT w &BSMZ$4&1BTT w +VNQ5ISFBEJOH1BTT w $PSSFMBUFE7BMVF1SPQBHBUJPO1BTT w $'(4JNQMJpDBUJPO1BTT w *OTUSVDUJPO$PNCJOJOH1BTT w 5BJM$BMM&MJNJOBUJPO1BTT w $'(4JNQMJpDBUJPO1BTT w 3FBTTPDJBUF1BTT w -PPQ3PUBUF1BTT w -*$.1BTT w -PPQ6OTXJUDI1BTT w $'(4JNQMJpDBUJPO1BTT w *OTUSVDUJPO$PNCJOJOH1BTT w *OE7BS4JNQMJGZ1BTT w -PPQ*EJPN1BTT w -PPQ%FMFUJPO1BTT w 4JNQMF-PPQ6OSPMM1BTT w .FSHFE-PBE4UPSF.PUJPO1BTT w (7/1BTT w .FN$QZ0QU1BTT w 4$$11BTT w #JU5SBDLJOH%$&1BTT w *OTUSVDUJPO$PNCJOJOH1BTT w +VNQ5ISFBEJOH1BTT w $PSSFMBUFE7BMVF1SPQBHBUJPO1BTT w %FBE4UPSF&MJNJOBUJPO1BTT w -*$.1BTT w "HHSFTTJWF%$&1BTT w $'(4JNQMJpDBUJPO1BTT w *OTUSVDUJPO$PNCJOJOH1BTT w #BSSJFS/PPQ1BTT w 3FWFSTF1PTU0SEFS'VODUJPO"UUST1BTT w &MJNJOBUF"WBJMBCMF&YUFSOBMMZ1BTT w (MPCBMT""8SBQQFS1BTT w 'MPBU*OU1BTT w -PPQ3PUBUF1BTT w -PPQ7FDUPSJ[F1BTT w *OTUSVDUJPO$PNCJOJOH1BTT w $'(4JNQMJpDBUJPO1BTT w *OTUSVDUJPO$PNCJOJOH1BTT w -PPQ6OSPMM1BTT w *OTUSVDUJPO$PNCJOJOH1BTT w -*$.1BTT w "MJHONFOU'SPN"TTVNQUJPOT1BTT w 4USJQ%FBE1SPUPUZQFT1BTT w (MPCBM%$&1BTT w $POTUBOU.FSHF1BTT
  27. -FU`TTFF--7.1BTTTUBUTGPSCN@MPPQ@XIJMFMPPQ

  28. --3#`T1BTTQJQFMJOF w 1BTTQJQFMJOFTJNQMJpFEXJUIPVUDIBOHJOHTUBUT 1BTTFT w5ZQF#BTFE""8SBQQFS1BTT w(MPCBMT""8SBQQFS1BTT w'VODUJPO*OMJOJOH1BTT w&BSMZ$4&1BTT w+VNQ5ISFBEJOH1BTT w$'(4JNQMJpDBUJPO1BTT

    w*OTUSVDUJPO$PNCJOJOH1BTT w3FBTTPDJBUF1BTT w-*$.1BTT w-PPQ6OTXJUDI1BTT w*OTUSVDUJPO$PNCJOJOH1BTT w*OE7BS4JNQMJGZ1BTT w(7/1BTT w.FN$QZ0QU1BTT w%FBE4UPSF&MJNJOBUJPO1BTT w-*$.1BTT w$'(4JNQMJpDBUJPO1BTT w*OTUSVDUJPO$PNCJOJOH1BTT w3FWFSTF1PTU0SEFS'VODUJPO"UUST1BTT w(MPCBMT""8SBQQFS1BTT w-PPQ7FDUPSJ[F1BTT w*OTUSVDUJPO$PNCJOJOH1BTT w-PPQ6OSPMM1BTT w*OTUSVDUJPO$PNCJOJOH1BTT w-*$.1BTT
  29. 8IJDI--7.1BTTJTJNQPSUBOU w "OE*DPVMESFQSPEVDFUIFTBNFQFSGPSNBODFXJUIPOMZ1BTTFT w -FU`TTFFIPXUIFZDPOUSJCVUFUPQFSGPSNBODF

  30. 4VNNBSZPG--3#`TPQUJNJ[BUJPOqPX 3VCZCZUFDPEF /BUJWFDPEF Y8JUICZUFDPEFJOUFSQSFUFS :"37 Y0QUJNJ[FEOBUJWFDPEF`T$GVODUJPO #FODINBSLFEPO8FSDLFSJOIUUQTHJUIVCDPNLLVCVOMMSCQVMM

  31. 4VNNBSZPG--3#`TPQUJNJ[BUJPOqPX 3VCZCZUFDPEF --3#$PNQJMFS /BUJWFDPEF Y8JUICZUFDPEFJOUFSQSFUFS :"37 Y0QUJNJ[FEOBUJWFDPEF`T$GVODUJPO #FODINBSLFEPO8FSDLFSJOIUUQTHJUIVCDPNLLVCVOMMSCQVMM Y+*5DPNQJMBUJPOXJUIPVUPQUJNJ[BUJPO

  32. 4VNNBSZPG--3#`TPQUJNJ[BUJPOqPX 3VCZCZUFDPEF --3#$PNQJMFS 'VODUJPO*OMJOJOH1BTT /BUJWFDPEF Y8JUICZUFDPEFJOUFSQSFUFS :"37 Y0QUJNJ[FEOBUJWFDPEF`T$GVODUJPO #FODINBSLFEPO8FSDLFSJOIUUQTHJUIVCDPNLLVCVOMMSCQVMM Y+*5DPNQJMBUJPOXJUIPVUPQUJNJ[BUJPO

    Y*OMJOFGVODUJPOT
  33. 4VNNBSZPG--3#`TPQUJNJ[BUJPOqPX 3VCZCZUFDPEF --3#$PNQJMFS 'VODUJPO*OMJOJOH1BTT -*$.1BTT /BUJWFDPEF Y8JUICZUFDPEFJOUFSQSFUFS :"37 Y0QUJNJ[FEOBUJWFDPEF`T$GVODUJPO #FODINBSLFEPO8FSDLFSJOIUUQTHJUIVCDPNLLVCVOMMSCQVMM

    Y+*5DPNQJMBUJPOXJUIPVUPQUJNJ[BUJPO Y*OMJOFGVODUJPOT Y3FNPWFMPPQJOWBSJBOUDPEFGSPNMPPQ
  34. 4VNNBSZPG--3#`TPQUJNJ[BUJPOqPX w *OMJOJOH'VODUJPOIBTNBKPSJNQBDU w "TDIBOHJOH$PEF(FO-FWFMB⒎FDUFEJUTJNQBDU BDUVBMMZDPEF HFOFSBUPSTFFNTUPEPPQUJNJ[BUJPOPOJOMJOFEDPEF w -*$. -PPQ*OWBSJBOU$PEF.PUJPO

    JTBMTPHPPE
  35. /PUF*OMJOJOHUISFTIPMEBOEQFSGPSNBODF w 8FTIPVMEUVOFJOMJOJOHUISFTIPMEPSNBOVBMMZTQFDJGZGVODUJPOTUPJOMJOF       

             #FODINBSLFEPO8FSDLFSJOIUUQTHJUIVCDPNLLVCVOMMSCQVMM 4QFFEVQ SBUJP *OMJOJOH UISFTIPME %FGBVMU 
  36. $PNQJMJOH:"37JOTUSVDUJPOTUP--7.*3

  37. w$POWFSU3VCZDPSFMJCSBSZUP--7.CJUDPEFVTJOH$MBOH w(FOFSBUF--7.*3GSPN:"37CZUFDPEF w"MMPX--7.UPPQUJNJ[FUIFNUPHFUIFS l-JGUUIF$PSFz "DUVBMMZDPNQJMJOHJTIBSEFSUIBOKVTUMFUUJOH--7.PQUJNJ[FJU

  38. #BTJDT8FDBOTJNVMBUFTUBDLXIFODPNQJMJOHJOTUSVDUJPOT :"37CZUFDPEF USBDF QVUPCKFDU QVUPCKFDU PQU@NVMU MFBWF --3#$PNQJMFS --7.*3 4JNVMBUFETUBDL

  39. #BTJDT8FDBOTJNVMBUFTUBDLXIFODPNQJMJOHJOTUSVDUJPOT :"37CZUFDPEF USBDF QVUPCKFDU QVUPCKFDU PQU@NVMU MFBWF --3#$PNQJMFS --7.*3 4JNVMBUFETUBDL

    USBDF
  40. #BTJDT8FDBOTJNVMBUFTUBDLXIFODPNQJMJOHJOTUSVDUJPOT :"37CZUFDPEF QVUPCKFDU QVUPCKFDU PQU@NVMU MFBWF --3#$PNQJMFS --7.*3 4JNVMBUFETUBDL USBDF

    DBMM!MMSC@JOTO@USBDF 
  41. #BTJDT8FDBOTJNVMBUFTUBDLXIFODPNQJMJOHJOTUSVDUJPOT :"37CZUFDPEF QVUPCKFDU QVUPCKFDU PQU@NVMU MFBWF --3#$PNQJMFS --7.*3 4JNVMBUFETUBDL DBMM!MMSC@JOTO@USBDF

     QVUPCKFDU
  42. #BTJDT8FDBOTJNVMBUFTUBDLXIFODPNQJMJOHJOTUSVDUJPOT :"37CZUFDPEF QVUPCKFDU PQU@NVMU MFBWF --3#$PNQJMFS --7.*3 4JNVMBUFETUBDL DBMM!MMSC@JOTO@USBDF 

    QVUPCKFDU 
  43. #BTJDT8FDBOTJNVMBUFTUBDLXIFODPNQJMJOHJOTUSVDUJPOT :"37CZUFDPEF QVUPCKFDU PQU@NVMU MFBWF --3#$PNQJMFS --7.*3 4JNVMBUFETUBDL DBMM!MMSC@JOTO@USBDF 

     QVUPCKFDU
  44. #BTJDT8FDBOTJNVMBUFTUBDLXIFODPNQJMJOHJOTUSVDUJPOT :"37CZUFDPEF PQU@NVMU MFBWF --3#$PNQJMFS --7.*3 4JNVMBUFETUBDL DBMM!MMSC@JOTO@USBDF  

    QVUPCKFDU 
  45. #BTJDT8FDBOTJNVMBUFTUBDLXIFODPNQJMJOHJOTUSVDUJPOT :"37CZUFDPEF PQU@NVMU MFBWF --3#$PNQJMFS --7.*3 4JNVMBUFETUBDL DBMM!MMSC@JOTO@USBDF  

     PQU@NVMU
  46. #BTJDT8FDBOTJNVMBUFTUBDLXIFODPNQJMJOHJOTUSVDUJPOT :"37CZUFDPEF MFBWF --3#$PNQJMFS --7.*3 4JNVMBUFETUBDL DBMM!MMSC@JOTO@USBDF   

    PQU@NVMU DBMM!MMSC@JOTO@PQU@NVMU  
  47. #BTJDT8FDBOTJNVMBUFTUBDLXIFODPNQJMJOHJOTUSVDUJPOT :"37CZUFDPEF MFBWF --3#$PNQJMFS --7.*3 4JNVMBUFETUBDL DBMM!MMSC@JOTO@USBDF  MFBWF DBMM!MMSC@JOTO@PQU@NVMU

     
  48. #BTJDT8FDBOTJNVMBUFTUBDLXIFODPNQJMJOHJOTUSVDUJPOT :"37CZUFDPEF --3#$PNQJMFS --7.*3 4JNVMBUFETUBDL DBMM!MMSC@JOTO@USBDF  DBMM!MMSC@JOTO@PQU@NVMU  

    MFBWF SFUJ
  49. #BTJDT8FDBOTJNVMBUFTUBDLXIFODPNQJMJOHJOTUSVDUJPOT :"37CZUFDPEF --3#$PNQJMFS --7.*3 4JNVMBUFETUBDL DBMM!MMSC@JOTO@USBDF  DBMM!MMSC@JOTO@PQU@NVMU  

    SFUJ 5IJT*3JTNVDITJNQMJpFEBOELJOEPGXSPOH4FF3&"%.&GPSBDUVBMPOF
  50. "EWBODFE)PXDBOXFTJNVMBUFTUBDLXJUIDPOEJUJPOBMKVNQ

  51. DBMM!MMSC@JOTO@PQU@QMVT   DBMM!MMSC@JOTO@PQU@QMVT   DBMM!MMSC@JOTO@PQU@QMVT   DBMM!MMSC@JOTO@PQU@QMVT

      8FDBO`ULOPXTUBDLTUBUFPODPNQJMFUJNF )PXDBOXFDPNQJMFJU "EWBODFE)PXDBOXFTJNVMBUFTUBDLXJUIDPOEJUJPOBMKVNQ
  52. "EWBODFE)PXDBOXFTJNVMBUFTUBDLXJUIDPOEJUJPOBMKVNQ :"37CZUFDPEF QVUTFMG PQU@TFOE@XJUIPVU@CMPDLB CSBODIVOMFTT QVUPCKFDU KVNQ QVUPCKFDU QVUTFMG PQU@TFOE@XJUIPVU@CMPDLC

    CSBODIVOMFTT QVUPCKFDU KVNQ QVUPCKFDU PQU@QMVT
  53. "EWBODFE)PXDBOXFTJNVMBUFTUBDLXJUIDPOEJUJPOBMKVNQ :"37CZUFDPEF QVUTFMG PQU@TFOE@XJUIPVU@CMPDLB CSBODIVOMFTT QVUPCKFDU KVNQ QVUPCKFDU QVUTFMG PQU@TFOE@XJUIPVU@CMPDLC

    CSBODIVOMFTT QVUPCKFDU KVNQ QVUPCKFDU PQU@QMVT --3#TQMJUTCZUFDPEF JOUPTPNFCBTJDCMPDLTJG UIFSFJTKVNQJOTUSVDUJPO PSJUTEFTUJOBUJPO
  54. "EWBODFE)PXDBOXFTJNVMBUFTUBDLXJUIDPOEJUJPOBMKVNQ QVUPCKFDU KVNQ QVUPCKFDU QVUTFMG PQU@TFOE@XJUIPVU@CMPDLC CSBODIVOMFTT QVUPCKFDU KVNQ QVUPCKFDU

    QVUTFMG PQU@TFOE@XJUIPVU@CMPDLB CSBODIVOMFTT PQU@QMVT
  55. "EWBODFE)PXDBOXFTJNVMBUFTUBDLXJUIDPOEJUJPOBMKVNQ QVUPCKFDU KVNQ QVUPCKFDU QVUTFMG PQU@TFOE@XJUIPVU@CMPDLC CSBODIVOMFTT QVUPCKFDU KVNQ QVUPCKFDU

    QVUTFMG PQU@TFOE@XJUIPVU@CMPDLB CSBODIVOMFTT PQU@QMVT 4JNVMBUFETUBDL 
  56. "EWBODFE)PXDBOXFTJNVMBUFTUBDLXJUIDPOEJUJPOBMKVNQ QVUPCKFDU KVNQ QVUPCKFDU QVUTFMG PQU@TFOE@XJUIPVU@CMPDLC CSBODIVOMFTT QVUPCKFDU KVNQ QVUPCKFDU

    QVUTFMG PQU@TFOE@XJUIPVU@CMPDLB CSBODIVOMFTT PQU@QMVT 4JNVMBUFETUBDL 4JNVMBUFETUBDL  
  57. "EWBODFE)PXDBOXFTJNVMBUFTUBDLXJUIDPOEJUJPOBMKVNQ QVUPCKFDU KVNQ QVUPCKFDU QVUTFMG PQU@TFOE@XJUIPVU@CMPDLC CSBODIVOMFTT QVUPCKFDU KVNQ QVUPCKFDU

    QVUTFMG PQU@TFOE@XJUIPVU@CMPDLB CSBODIVOMFTT PQU@QMVT 4JNVMBUFETUBDL П ˠ ˠ ПOPEFDBOSFQSFTFOU NVMUJQMFWBMVFTCBTFE POCSBODIFECBTJDCMPDL
  58. "EWBODFE)PXDBOXFTJNVMBUFTUBDLXJUIDPOEJUJPOBMKVNQ QVUPCKFDU KVNQ QVUPCKFDU QVUTFMG PQU@TFOE@XJUIPVU@CMPDLC CSBODIVOMFTT QVUPCKFDU KVNQ QVUPCKFDU

    QVUTFMG PQU@TFOE@XJUIPVU@CMPDLB CSBODIVOMFTT PQU@QMVT 4JNVMBUFETUBDL П ˠ ˠ 
  59. "EWBODFE)PXDBOXFTJNVMBUFTUBDLXJUIDPOEJUJPOBMKVNQ QVUPCKFDU KVNQ QVUPCKFDU QVUTFMG PQU@TFOE@XJUIPVU@CMPDLC CSBODIVOMFTT QVUPCKFDU KVNQ QVUPCKFDU

    QVUTFMG PQU@TFOE@XJUIPVU@CMPDLB CSBODIVOMFTT PQU@QMVT 4JNVMBUFETUBDL П ˠ ˠ  4JNVMBUFETUBDL П ˠ ˠ 
  60. 4JNVMBUFETUBDL "EWBODFE)PXDBOXFTJNVMBUFTUBDLXJUIDPOEJUJPOBMKVNQ QVUPCKFDU KVNQ QVUPCKFDU QVUTFMG PQU@TFOE@XJUIPVU@CMPDLC CSBODIVOMFTT QVUPCKFDU KVNQ

    QVUPCKFDU QVUTFMG PQU@TFOE@XJUIPVU@CMPDLB CSBODIVOMFTT PQU@QMVT П ˠ ˠ П ˠ ˠ
  61. 4JNVMBUFETUBDL "EWBODFE)PXDBOXFTJNVMBUFTUBDLXJUIDPOEJUJPOBMKVNQ QVUPCKFDU KVNQ QVUPCKFDU QVUTFMG PQU@TFOE@XJUIPVU@CMPDLC CSBODIVOMFTT QVUPCKFDU KVNQ

    QVUPCKFDU QVUTFMG PQU@TFOE@XJUIPVU@CMPDLB CSBODIVOMFTT PQU@QMVT П ˠ ˠ П ˠ ˠ DBMM!MMSC@JOTO@PQU@QMVT П П
  62. )PXUPSFQMBDF3VCZNFUIPEXJUI$GVODUJPO w "TJU`TCVJMUBT$FYUFOTJPO *DPVMEO`UUPVDIDPSFEBUBTUSVDUVSF w LPUPMENFUIBUUIFSF`TlSFTFSWFEzpFMEJO*4FRTUSVDUGPS+*5 FEGVODUJPO CVUBOZXBZXFDBO`UDBMMJUXJUIPVUNPEJGZJOHDPSF w 8FDBO`UJNQMFNFOUDBUDIUBCMFXJUISC@EFpOF@NFUIPE

    w )PXDBOXFJNQMFNFOUJU
  63. )PXUPSFQMBDF3VCZNFUIPEXJUI$GVODUJPO 5IFSFJTBOJOTUSVDUJPOUP JOWPLFOBUJWFDPNQJMFE NFUIPEGPSPQUJNJ[BUJPO 5IJTJTGPS+*5 JTO`UJU

  64. )PXUPSFQMBDF3VCZNFUIPEXJUI$GVODUJPO 8FDBOUISPX:"37`T JOUFSOBMFYDFQUJPOTBOE VUJMJ[FDBUDIUBCMFXJUI UIJTJOTUSVDUJPO

  65. )PXUPSFQMBDF3VCZNFUIPEXJUI$GVODUJPO :"37CZUFDPEF USBDF QVUPCKFDU QVUPCKFDU PQU@NVMU MFBWF --7.*3

  66. )PXUPSFQMBDF3VCZNFUIPEXJUI$GVODUJPO :"37CZUFDPEF USBDF QVUPCKFDU QVUPCKFDU PQU@NVMU MFBWF --7.*3 DBMM!MMSC@JOTO@USBDF 

    DBMM!MMSC@JOTO@PQU@NVMU   SFUJ $PNQJMF
  67. )PXUPSFQMBDF3VCZNFUIPEXJUI$GVODUJPO :"37CZUFDPEF PQU@DBMM@D@GVODUJPO MFBWF --7.*3 DBMM!MMSC@JOTO@USBDF  DBMM!MMSC@JOTO@PQU@NVMU  

    SFUJ $PNQJMF 3FQMBDF
  68. )PXUPIBOEMFFYDFQUJPOTXJUI+*5FEDPEF w +VTUVTJOHPQU@DBMM@D@GVODUJPOBOETFUUJOHFYDFQUJPOJTOPU FOPVHIGPSIBOEMJOHFYDFQUJPOT w "DUVBMMZ:"37TFFTQSPHSBNDPVOUFSUPMPPLVQDBUDIUBCMF TP XFOFFEUPNPEJGZJU 1SPHSBNDPVOUFSTIPVMECFNPWFEEVSJOHFYFDVUJPOUPNFFUDBUDI UBCMF`TSBOHF

    TUBSUQPTJUJPO FOEQPTJUJPOJOUIJTFYBNQMF
  69. )PXUPIBOEMFFYDFQUJPOTXJUI+*5FEDPEF :"37CZUFDPEF PQU@DBMM@D@GVODUJPO MFBWF --7.*3 DBMM!MMSC@JOTO@USBDF  DBMM!MMSC@JOTO@PQU@NVMU  

    SFUJ
  70. )PXUPIBOEMFFYDFQUJPOTXJUI+*5FEDPEF :"37CZUFDPEF PQU@DBMM@D@GVODUJPO MFBWF --7.*3 DBMM!MMSC@JOTO@USBDF  DBMM!MMSC@TFU@QD  SFUJ

    DBMM!MMSC@JOTO@PQU@NVMU   DBMM!MMSC@TFU@QD  MFBWF MFBWF MFBWF 'JMMlMFBWFzUPSFTU BOEMMSC@TFU@QDNPWFTQSPHSBNDPVOUFSBTPSJHJOBMCZUFDPEF "DUVBMMZTPNFUJNFTCZUFDPEFFOETXJUIOPUlMFBWFzCVUlUISPXz TPJOUIBUDBTF*OFFEUPTLJQPQUJNJ[BUJPOPSpMMlUISPXzJOTUFBEPGlMFBWFz OPUJNQMFNFOUFE
  71. )PXUPIBOEMFFYDFQUJPOTXJUI+*5FEDPEF -JNJUBUJPOTPGUIJTBQQSPBDI w *GJUNBZUISPXFYDFQUJPOBU QPTJUJPOPGGVODUJPOQPJOUFS  XFDBO`UpMMMFBWFUPUIFQPTJUJPOBOEPQUJNJ[FNFUIPE w #VUVTVBMMZPQFSBOEPGpSTUlUSBDFzXJMMCFUIFSF TPJU`TSBSF

    w 5IJTOFFETUPJOWPLF3VCZ7.JGUIFPQUJNJ[FENFUIPEJTDBMMFE GSPN$GVODUJPO w 4PJEFBMMZXFTIPVMENPEJGZDPSFBOEDBMMUIJTGVODUJPOEJSFDUMZ
  72. 'VUVSFEJSFDUJPOT

  73. *T--7.HPPEGPS3VCZY w +*5DPNQJMBUJPOXJUI--7.DBONBLF3VCZYQPTTJCMF

  74. *T--7.HPPEGPS3VCZY w +*5DPNQJMBUJPOXJUI--7.DBONBLF3VCZYQPTTJCMF w #VUEFQFOEJOHPO--7.JTBIBSEUIJOH w --3#DBOCFDPNQJMFEXJUI--7. CVUOPUXJUI--7. w 6OMJLFXSJUJOH$DPEFXJUI$3VCZIFBEFST

    XFTIPVMECVJME--7.*3 QPSUBCMFUPCPUICJUBOECJUFOWJSPONFOUTCZFYUSBF⒎PSU w %JEZPVLOPX3VCJOJVTESPQQFE--7.GPSJUT+*5DPNQJMFSCVHT
  75. 4PNFBQQSPBDIFTUPVUJMJ[F--7.QPXFS  $PNQJMFBOEMJOLXJUI--7. w "TNBJOPQUJNJ[BUJPOUBSHFUXPVMECFBDUVBMMZ JOMJOFE $3VCZ`TDPEF NBOVBMMZ CVJMEJOH--7.*3XPVMECFPWFSLJMMBUFBSMZTUBHFCFGPSFJOMJOJOH3VCZNFUIPET

  76. 4PNFBQQSPBDIFTUPVUJMJ[F--7.QPXFS  $PNQJMFBOEMJOLXJUI--7. w "TNBJOPQUJNJ[BUJPOUBSHFUXPVMECFBDUVBMMZ JOMJOFE $3VCZ`TDPEF NBOVBMMZ CVJMEJOH--7.*3XPVMECFPWFSLJMMBUFBSMZTUBHFCFGPSFJOMJOJOH3VCZNFUIPET 

    (FOFSBUF$DPEFBOEMFUDMBOH  DPNQJMFBOEPQUJNJ[FJU w "TJUEPFTOPUGVMMZVUJMJ[FUIFCFOFpUPGIBWJOH--7.*3 UIJTXPVMEXPVMECFCFUUFS
  77. 4PNFBQQSPBDIFTUPVUJMJ[F--7.QPXFS  $PNQJMFBOEMJOLXJUI--7. w "TNBJOPQUJNJ[BUJPOUBSHFUXPVMECFBDUVBMMZ JOMJOFE $3VCZ`TDPEF NBOVBMMZ CVJMEJOH--7.*3XPVMECFPWFSLJMMBUFBSMZTUBHFCFGPSFJOMJOJOH3VCZNFUIPET 

    (FOFSBUF$DPEFBOEMFUDMBOH  DPNQJMFBOEPQUJNJ[FJU w "TJUEPFTOPUGVMMZVUJMJ[FUIFCFOFpUPGIBWJOH--7.*3 UIJTXPVMECFCFUUFS  (FOFSBUF--7.*3GSPN$DPEFXJUIDMBOH  BOEPQUJNJ[FXJUIPQU   w PQU  JT--7.`TDPNNBOEMJOFUPPMUPPQUJNJ[F--7.*3XJUI1BTTFT w 8FDBOVTFJEFBM1BTTQJQFMJOFGPS$3VCZBOENBYJNJ[FQFSGPSNBODFXJUIMFTTF⒎PSU
  78. 'VUVSFEJSFDUJPOPG--3#QSPKFDU w $IBOHFUPVTFDMBOH  BOEPQU  JOTUFBEPGEJSFDUMZVTJOH--7. w $SFBUFOFX--7.1BTTGPS$3VCZBOEVTFJUJGOFDFTTBSZ w

    $PNQJMFDPEFJOBOPUIFSUISFBE w *OMJOFNPSFJOUFSOBM$GVODUJPOTBOE3VCZNFUIPE w *NQSPWFQFSGPSNBODFXJUISFBMXPSMECFODINBSL
  79. $PODMVTJPO w --3#`TYJNQSPWFNFOUJTBDIJFWFECZKVTUDPNQJMJOHJUBOE PQUJNJ[JOHJUXJUI--7.'VODUJPO*OMJOJOH1BTTBOE-*$.1BTT w +VTUVTJOHDMBOHBOEPQUTFFNFEBCFUUFSBQQSPBDIUIBOEJSFDUMZ VTJOH--7.BUFBSMZTUBHF